{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "713f4b77",
   "metadata": {},
   "source": [
    "### 构建决策树--真实账号案例"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "b2c467e4",
   "metadata": {},
   "outputs": [],
   "source": [
    "#数据准备\n",
    "import numpy as np\n",
    "import pandas as pd "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "d61c6159",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['N' 'Y' 'Y' 'Y' 'Y' 'Y' 'N' 'Y' 'Y' 'N']\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日志密度</th>\n",
       "      <th>好友密度</th>\n",
       "      <th>真实头像</th>\n",
       "      <th>真实用户</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>s</td>\n",
       "      <td>s</td>\n",
       "      <td>N</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>s</td>\n",
       "      <td>l</td>\n",
       "      <td>Y</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>l</td>\n",
       "      <td>m</td>\n",
       "      <td>Y</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>m</td>\n",
       "      <td>m</td>\n",
       "      <td>Y</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>l</td>\n",
       "      <td>m</td>\n",
       "      <td>Y</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>m</td>\n",
       "      <td>l</td>\n",
       "      <td>N</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>m</td>\n",
       "      <td>s</td>\n",
       "      <td>Y</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>l</td>\n",
       "      <td>m</td>\n",
       "      <td>Y</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>m</td>\n",
       "      <td>s</td>\n",
       "      <td>Y</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>s</td>\n",
       "      <td>s</td>\n",
       "      <td>Y</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "  日志密度 好友密度 真实头像 真实用户\n",
       "0    s    s    N    N\n",
       "1    s    l    Y    Y\n",
       "2    l    m    Y    Y\n",
       "3    m    m    Y    Y\n",
       "4    l    m    Y    Y\n",
       "5    m    l    N    Y\n",
       "6    m    s    Y    N\n",
       "7    l    m    Y    Y\n",
       "8    m    s    Y    Y\n",
       "9    s    s    Y    N"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "y = np.array(list('NYYYYYNYYN'))\n",
    "print(y)\n",
    "X = pd.DataFrame({'日志密度':list('sslmlmmlms'),\n",
    "                  '好友密度':list('slmmmlsmss'),\n",
    "                  '真实头像':list('NYYYYNYYYY'),\n",
    "                  '真实用户':y})\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "b4679de7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日志密度</th>\n",
       "      <th>好友密度</th>\n",
       "      <th>真实头像</th>\n",
       "      <th>真实用户</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   日志密度  好友密度  真实头像  真实用户\n",
       "0     0     0     0     0\n",
       "1     0     2     1     1\n",
       "2     2     1     1     1\n",
       "3     1     1     1     1\n",
       "4     2     1     1     1\n",
       "5     1     2     0     1\n",
       "6     1     0     1     0\n",
       "7     2     1     1     1\n",
       "8     1     0     1     1\n",
       "9     0     0     1     0"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#数据修改（map函数，进行数据转换） 即将非数字的数据转换为数字数据\n",
    "X['日志密度'] = X['日志密度'].map({'s':0,'m':1,'l':2})\n",
    "X['好友密度'] = X['好友密度'].map({'s':0,'m':1,'l':2})\n",
    "X['真实头像'] = X['真实头像'].map({'N':0,'Y':1})\n",
    "X['真实用户'] = X['真实用户'].map({'N':0,'Y':1})\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "3559f9c3",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<style>#sk-container-id-1 {\n",
       "  /* Definition of color scheme common for light and dark mode */\n",
       "  --sklearn-color-text: black;\n",
       "  --sklearn-color-line: gray;\n",
       "  /* Definition of color scheme for unfitted estimators */\n",
       "  --sklearn-color-unfitted-level-0: #fff5e6;\n",
       "  --sklearn-color-unfitted-level-1: #f6e4d2;\n",
       "  --sklearn-color-unfitted-level-2: #ffe0b3;\n",
       "  --sklearn-color-unfitted-level-3: chocolate;\n",
       "  /* Definition of color scheme for fitted estimators */\n",
       "  --sklearn-color-fitted-level-0: #f0f8ff;\n",
       "  --sklearn-color-fitted-level-1: #d4ebff;\n",
       "  --sklearn-color-fitted-level-2: #b3dbfd;\n",
       "  --sklearn-color-fitted-level-3: cornflowerblue;\n",
       "\n",
       "  /* Specific color for light theme */\n",
       "  --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, white)));\n",
       "  --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, black)));\n",
       "  --sklearn-color-icon: #696969;\n",
       "\n",
       "  @media (prefers-color-scheme: dark) {\n",
       "    /* Redefinition of color scheme for dark theme */\n",
       "    --sklearn-color-text-on-default-background: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-background: var(--sg-background-color, var(--theme-background, var(--jp-layout-color0, #111)));\n",
       "    --sklearn-color-border-box: var(--sg-text-color, var(--theme-code-foreground, var(--jp-content-font-color1, white)));\n",
       "    --sklearn-color-icon: #878787;\n",
       "  }\n",
       "}\n",
       "\n",
       "#sk-container-id-1 {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 pre {\n",
       "  padding: 0;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-hidden--visually {\n",
       "  border: 0;\n",
       "  clip: rect(1px 1px 1px 1px);\n",
       "  clip: rect(1px, 1px, 1px, 1px);\n",
       "  height: 1px;\n",
       "  margin: -1px;\n",
       "  overflow: hidden;\n",
       "  padding: 0;\n",
       "  position: absolute;\n",
       "  width: 1px;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-dashed-wrapped {\n",
       "  border: 1px dashed var(--sklearn-color-line);\n",
       "  margin: 0 0.4em 0.5em 0.4em;\n",
       "  box-sizing: border-box;\n",
       "  padding-bottom: 0.4em;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-container {\n",
       "  /* jupyter's `normalize.less` sets `[hidden] { display: none; }`\n",
       "     but bootstrap.min.css set `[hidden] { display: none !important; }`\n",
       "     so we also need the `!important` here to be able to override the\n",
       "     default hidden behavior on the sphinx rendered scikit-learn.org.\n",
       "     See: https://github.com/scikit-learn/scikit-learn/issues/21755 */\n",
       "  display: inline-block !important;\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-text-repr-fallback {\n",
       "  display: none;\n",
       "}\n",
       "\n",
       "div.sk-parallel-item,\n",
       "div.sk-serial,\n",
       "div.sk-item {\n",
       "  /* draw centered vertical line to link estimators */\n",
       "  background-image: linear-gradient(var(--sklearn-color-text-on-default-background), var(--sklearn-color-text-on-default-background));\n",
       "  background-size: 2px 100%;\n",
       "  background-repeat: no-repeat;\n",
       "  background-position: center center;\n",
       "}\n",
       "\n",
       "/* Parallel-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item::after {\n",
       "  content: \"\";\n",
       "  width: 100%;\n",
       "  border-bottom: 2px solid var(--sklearn-color-text-on-default-background);\n",
       "  flex-grow: 1;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel {\n",
       "  display: flex;\n",
       "  align-items: stretch;\n",
       "  justify-content: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  position: relative;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:first-child::after {\n",
       "  align-self: flex-end;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:last-child::after {\n",
       "  align-self: flex-start;\n",
       "  width: 50%;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-parallel-item:only-child::after {\n",
       "  width: 0;\n",
       "}\n",
       "\n",
       "/* Serial-specific style estimator block */\n",
       "\n",
       "#sk-container-id-1 div.sk-serial {\n",
       "  display: flex;\n",
       "  flex-direction: column;\n",
       "  align-items: center;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  padding-right: 1em;\n",
       "  padding-left: 1em;\n",
       "}\n",
       "\n",
       "\n",
       "/* Toggleable style: style used for estimator/Pipeline/ColumnTransformer box that is\n",
       "clickable and can be expanded/collapsed.\n",
       "- Pipeline and ColumnTransformer use this feature and define the default style\n",
       "- Estimators will overwrite some part of the style using the `sk-estimator` class\n",
       "*/\n",
       "\n",
       "/* Pipeline and ColumnTransformer style (default) */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable {\n",
       "  /* Default theme specific background. It is overwritten whether we have a\n",
       "  specific estimator or a Pipeline/ColumnTransformer */\n",
       "  background-color: var(--sklearn-color-background);\n",
       "}\n",
       "\n",
       "/* Toggleable label */\n",
       "#sk-container-id-1 label.sk-toggleable__label {\n",
       "  cursor: pointer;\n",
       "  display: block;\n",
       "  width: 100%;\n",
       "  margin-bottom: 0;\n",
       "  padding: 0.5em;\n",
       "  box-sizing: border-box;\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:before {\n",
       "  /* Arrow on the left of the label */\n",
       "  content: \"▸\";\n",
       "  float: left;\n",
       "  margin-right: 0.25em;\n",
       "  color: var(--sklearn-color-icon);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 label.sk-toggleable__label-arrow:hover:before {\n",
       "  color: var(--sklearn-color-text);\n",
       "}\n",
       "\n",
       "/* Toggleable content - dropdown */\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content {\n",
       "  max-height: 0;\n",
       "  max-width: 0;\n",
       "  overflow: hidden;\n",
       "  text-align: left;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content pre {\n",
       "  margin: 0.2em;\n",
       "  border-radius: 0.25em;\n",
       "  color: var(--sklearn-color-text);\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-toggleable__content.fitted pre {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~div.sk-toggleable__content {\n",
       "  /* Expand drop-down */\n",
       "  max-height: 200px;\n",
       "  max-width: 100%;\n",
       "  overflow: auto;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {\n",
       "  content: \"▾\";\n",
       "}\n",
       "\n",
       "/* Pipeline/ColumnTransformer-specific style */\n",
       "\n",
       "#sk-container-id-1 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator-specific style */\n",
       "\n",
       "/* Colorize estimator box */\n",
       "#sk-container-id-1 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted input.sk-toggleable__control:checked~label.sk-toggleable__label {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label label.sk-toggleable__label,\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  /* The background is the default theme color */\n",
       "  color: var(--sklearn-color-text-on-default-background);\n",
       "}\n",
       "\n",
       "/* On hover, darken the color of the background */\n",
       "#sk-container-id-1 div.sk-label:hover label.sk-toggleable__label {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "/* Label box, darken color on hover, fitted */\n",
       "#sk-container-id-1 div.sk-label.fitted:hover label.sk-toggleable__label.fitted {\n",
       "  color: var(--sklearn-color-text);\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Estimator label */\n",
       "\n",
       "#sk-container-id-1 div.sk-label label {\n",
       "  font-family: monospace;\n",
       "  font-weight: bold;\n",
       "  display: inline-block;\n",
       "  line-height: 1.2em;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-label-container {\n",
       "  text-align: center;\n",
       "}\n",
       "\n",
       "/* Estimator-specific */\n",
       "#sk-container-id-1 div.sk-estimator {\n",
       "  font-family: monospace;\n",
       "  border: 1px dotted var(--sklearn-color-border-box);\n",
       "  border-radius: 0.25em;\n",
       "  box-sizing: border-box;\n",
       "  margin-bottom: 0.5em;\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-0);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-0);\n",
       "}\n",
       "\n",
       "/* on hover */\n",
       "#sk-container-id-1 div.sk-estimator:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-2);\n",
       "}\n",
       "\n",
       "#sk-container-id-1 div.sk-estimator.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-2);\n",
       "}\n",
       "\n",
       "/* Specification for estimator info (e.g. \"i\" and \"?\") */\n",
       "\n",
       "/* Common style for \"i\" and \"?\" */\n",
       "\n",
       ".sk-estimator-doc-link,\n",
       "a:link.sk-estimator-doc-link,\n",
       "a:visited.sk-estimator-doc-link {\n",
       "  float: right;\n",
       "  font-size: smaller;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1em;\n",
       "  height: 1em;\n",
       "  width: 1em;\n",
       "  text-decoration: none !important;\n",
       "  margin-left: 1ex;\n",
       "  /* unfitted */\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted,\n",
       "a:link.sk-estimator-doc-link.fitted,\n",
       "a:visited.sk-estimator-doc-link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "div.sk-estimator:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link:hover,\n",
       ".sk-estimator-doc-link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "div.sk-estimator.fitted:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover,\n",
       "div.sk-label-container:hover .sk-estimator-doc-link.fitted:hover,\n",
       ".sk-estimator-doc-link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "/* Span, style for the box shown on hovering the info icon */\n",
       ".sk-estimator-doc-link span {\n",
       "  display: none;\n",
       "  z-index: 9999;\n",
       "  position: relative;\n",
       "  font-weight: normal;\n",
       "  right: .2ex;\n",
       "  padding: .5ex;\n",
       "  margin: .5ex;\n",
       "  width: min-content;\n",
       "  min-width: 20ex;\n",
       "  max-width: 50ex;\n",
       "  color: var(--sklearn-color-text);\n",
       "  box-shadow: 2pt 2pt 4pt #999;\n",
       "  /* unfitted */\n",
       "  background: var(--sklearn-color-unfitted-level-0);\n",
       "  border: .5pt solid var(--sklearn-color-unfitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link.fitted span {\n",
       "  /* fitted */\n",
       "  background: var(--sklearn-color-fitted-level-0);\n",
       "  border: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "\n",
       ".sk-estimator-doc-link:hover span {\n",
       "  display: block;\n",
       "}\n",
       "\n",
       "/* \"?\"-specific style due to the `<a>` HTML tag */\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link {\n",
       "  float: right;\n",
       "  font-size: 1rem;\n",
       "  line-height: 1em;\n",
       "  font-family: monospace;\n",
       "  background-color: var(--sklearn-color-background);\n",
       "  border-radius: 1rem;\n",
       "  height: 1rem;\n",
       "  width: 1rem;\n",
       "  text-decoration: none;\n",
       "  /* unfitted */\n",
       "  color: var(--sklearn-color-unfitted-level-1);\n",
       "  border: var(--sklearn-color-unfitted-level-1) 1pt solid;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted {\n",
       "  /* fitted */\n",
       "  border: var(--sklearn-color-fitted-level-1) 1pt solid;\n",
       "  color: var(--sklearn-color-fitted-level-1);\n",
       "}\n",
       "\n",
       "/* On hover */\n",
       "#sk-container-id-1 a.estimator_doc_link:hover {\n",
       "  /* unfitted */\n",
       "  background-color: var(--sklearn-color-unfitted-level-3);\n",
       "  color: var(--sklearn-color-background);\n",
       "  text-decoration: none;\n",
       "}\n",
       "\n",
       "#sk-container-id-1 a.estimator_doc_link.fitted:hover {\n",
       "  /* fitted */\n",
       "  background-color: var(--sklearn-color-fitted-level-3);\n",
       "}\n",
       "</style><div id=\"sk-container-id-1\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>DecisionTreeClassifier(criterion=&#x27;entropy&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator fitted sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-1\" type=\"checkbox\" checked><label for=\"sk-estimator-id-1\" class=\"sk-toggleable__label fitted sk-toggleable__label-arrow fitted\">&nbsp;&nbsp;DecisionTreeClassifier<a class=\"sk-estimator-doc-link fitted\" rel=\"noreferrer\" target=\"_blank\" href=\"https://scikit-learn.org/1.4/modules/generated/sklearn.tree.DecisionTreeClassifier.html\">?<span>Documentation for DecisionTreeClassifier</span></a><span class=\"sk-estimator-doc-link fitted\">i<span>Fitted</span></span></label><div class=\"sk-toggleable__content fitted\"><pre>DecisionTreeClassifier(criterion=&#x27;entropy&#x27;)</pre></div> </div></div></div></div>"
      ],
      "text/plain": [
       "DecisionTreeClassifier(criterion='entropy')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#建模并训练\n",
    "from sklearn.tree import DecisionTreeClassifier \n",
    "\n",
    "model = DecisionTreeClassifier(criterion='entropy')\n",
    "model.fit(X, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "cc76fe40",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['N', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'Y', 'Y', 'N'], dtype='<U1')"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#预测\n",
    "y_ = model.predict(X)\n",
    "y_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "5de1011b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAMWCAYAAABhhTfJAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAADhvklEQVR4nOzddVhU2R8G8HfoLgExQAW7u9u1O9buYFxdt9Ndtzv87a6xiwp2oCiKYncXoohKSygg3Qww8fsDGUEaBi4w7+d59tlx7rn3fgnh9Zx7zhEpFAoFiIiIiEhtaAhdABERERFVLwZAIiIiIjXDAEhERESkZhgAiYiIiNQMAyARERGRmmEAJCIiIlIzDIBEREREaoYBkIiIiEjNMAASERERqRkGQCIiIiI1wwBIREREpGYYAImIiIjUDAMgERERkZphACQiIiJSMwyARERERGqGAZCIiIhIzTAAEhEREakZBkAiIiIiNcMASERERKRmGACJiIiI1AwDIBEREZGaYQAkIiIiUjMMgERERERqhgGQiIiISM0wABIRERGpGQZAIiIiIjXDAEhERESkZhgAiYiIiNQMAyARERGRmmEAJCIiIlIzDIBEREREaoYBkIiIiEjNMAASERERqRkGQCIiIiI1wwBIREREpGYYAImIiIjUDAMgERERkZphACQiIiJSMwyARERERGqGAZCIiIhIzTAAEhEREakZBkAiIiIiNcMASERERKRmGACJiIiI1AwDIBEREZGaYQAkIiIiUjMMgERERERqhgGQiIiISM0wABIRERGpGQZAIiIiIjXDAEhERESkZhgAiYiIiNQMAyARERGRmmEAJCIiIlIzDIBEREREaoYBkIiIiEjNMAASERERqRkGQCIiIiI1wwBIREREpGYYAImIiIjUDAMgERERkZphACQiIiJSMwyARERERGqGAZCIiIhIzTAAEhEREakZBkAiIiIiNcMASERERKRmGACJiIiI1AwDIBEREZGaYQAkIiIiUjMMgERERERqhgGQiIiISM0wABIRERGpGQZAIiIiIjXDAEhERESkZhgAiYiIiNQMAyARERGRmmEAJCIiIlIzDIBEREREaoYBkIiIiEjNMAASERERqRkGQCIiIiI1wwBIREREpGYYAImIiIjUDAMgERERkZphACQiIiJSMwyARERERGqGAZCIiIhIzTAAEhER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",
      "text/plain": [
       "<Figure size 800x1000 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#模型可视化\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn import tree\n",
    "plt.rcParams['font.family'] = 'STKaiti'\n",
    "plt.figure(figsize=(8,10))\n",
    "fn = X.columns\n",
    "_ = tree.plot_tree(model, filled = True, feature_names = fn)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "051d012f",
   "metadata": {},
   "source": [
    "### 信息熵"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "39b36fbc",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日志密度</th>\n",
       "      <th>好友密度</th>\n",
       "      <th>真实头像</th>\n",
       "      <th>真实用户</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   日志密度  好友密度  真实头像 真实用户\n",
       "0     0     0     0    N\n",
       "1     0     2     1    Y\n",
       "2     2     1     1    Y\n",
       "3     1     1     1    Y\n",
       "4     2     1     1    Y\n",
       "5     1     2     0    Y\n",
       "6     1     0     1    N\n",
       "7     2     1     1    Y\n",
       "8     1     0     1    Y\n",
       "9     0     0     1    N"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X['真实用户'] = y\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "1560bff1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "真实用户\n",
       "Y    0.7\n",
       "N    0.3\n",
       "Name: count, dtype: float64"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = X['真实用户']\n",
    "p = s.value_counts() / s.size  #计算各个类别的百分比\n",
    "p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "a06b3cca",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.8812908992306926"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#信息熵计算\n",
    "(p * np.log2(1 / p)).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "51a1bd46",
   "metadata": {},
   "source": [
    "### 真实用户信息熵分裂条件"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "0acb553b",
   "metadata": {},
   "source": [
    "####  按照日志密度进行划分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "26c8524b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 1, 2], dtype=int64)"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "x = X['日志密度'].unique()\n",
    "x.sort()\n",
    "display(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "e9240549",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index([False, True], dtype='bool', name='日志密度')\n",
      "2    Y\n",
      "3    Y\n",
      "4    Y\n",
      "5    Y\n",
      "6    N\n",
      "7    Y\n",
      "8    Y\n",
      "Name: 真实用户, dtype: object\n",
      "0    N\n",
      "1    Y\n",
      "9    N\n",
      "Name: 真实用户, dtype: object\n",
      "0.5 0.689659695223976\n"
     ]
    }
   ],
   "source": [
    "for i in range(len(x)-1):\n",
    "    split = x[i:i+2].mean() # 切片一次切两个，求平均值【裂分点】\n",
    "    cond = X['日志密度'] <= split  # 条件判断\n",
    "    p = cond.value_counts() / cond.size\n",
    "    #print(p)\n",
    "    indexs = p.index\n",
    "    print(indexs)\n",
    "    entropy = 0\n",
    "    for index in indexs:\n",
    "        user = X[cond == index]['真实用户'] \n",
    "        print(user)\n",
    "        # 分别计算分成的两边的信息熵\n",
    "        p_user = user.value_counts() / user.size\n",
    "        # 一边的信息熵，乘以这一边占全部数据的比例\n",
    "        entropy += (p_user * np.log2(1 / p_user)).sum() * p[index]\n",
    "    print(split, entropy)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a4f3f55c",
   "metadata": {},
   "source": [
    "#### 按照好友密度进行划分"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "5352543e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.5 0.32451124978365314\n",
      "1.5 0.763547202339972\n"
     ]
    }
   ],
   "source": [
    "x = X['好友密度'].unique()\n",
    "x.sort()\n",
    "\n",
    "for i in range(len(x)-1):\n",
    "    split = x[i:i+2].mean() # 切片一次切两个，求平均值【裂分点】\n",
    "    cond = X['好友密度'] <= split  # 条件判断\n",
    "    p = cond.value_counts() / cond.size\n",
    "    #print(p)\n",
    "    indexs = p.index\n",
    "    #print(indexs)\n",
    "    entropy = 0\n",
    "    for index in indexs:\n",
    "        user = X[cond == index]['真实用户'] \n",
    "        # 分别计算分成的两边的信息熵\n",
    "        p_user = user.value_counts() / user.size\n",
    "        # 一边的信息熵，乘以这一边占全部数据的比例\n",
    "        entropy += (p_user * np.log2(1 / p_user)).sum() * p[index]\n",
    "    print(split, entropy)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "122c3b8d",
   "metadata": {},
   "source": [
    "#### 信息增益"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "f3d171c9",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5567796494470394"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按0.5划分\n",
    "0.8812908992306926 - 0.32451124978365314"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "1e1b7b91",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.11774369689072062"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#按1.5划分\n",
    "0.8812908992306926 - 0.763547202339972"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "54830f31",
   "metadata": {},
   "source": [
    "#### 多个特征进行最佳分裂"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "81f2e58e",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日志密度 0.5 0.689659695223976\n",
      "日志密度 1.5 0.689659695223976\n",
      "好友密度 0.5 0.32451124978365314\n",
      "好友密度 1.5 0.763547202339972\n",
      "真实头像 0.5 0.8490224995673064\n",
      "最佳裂分条件是： {'好友密度': 0.5}\n"
     ]
    }
   ],
   "source": [
    "columns = ['日志密度','好友密度','真实头像']\n",
    "lower_entropy = 1 # 记录，最低信息熵，是多少\n",
    "condition = {} # 记录最佳裂分点\n",
    "for col in columns:\n",
    "    x = X[col].unique()\n",
    "    x.sort()\n",
    "    # 如何划分问题\n",
    "    for i in range(len(x) -1):\n",
    "        split = x[i:i+2].mean()\n",
    "        cond = X[col] <= split\n",
    "        p = cond.value_counts()/cond.size\n",
    "        indexes = p.index\n",
    "        entropy = 0\n",
    "        for index in indexes:\n",
    "            user = X[cond == index]['真实用户']\n",
    "            p_user = user.value_counts()/user.size\n",
    "            entropy += (p_user * np.log2(1/p_user)).sum() * p[index]\n",
    "        print(col,split,entropy)\n",
    "        if entropy < lower_entropy:\n",
    "            condition.clear()\n",
    "            lower_entropy = entropy\n",
    "            condition[col] = split\n",
    "print('最佳裂分条件是：',condition)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8016ec9",
   "metadata": {},
   "source": [
    "### Jini系数分裂"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "f21f928b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['N' 'Y' 'Y' 'Y' 'Y' 'Y' 'N' 'Y' 'Y' 'N']\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日志密度</th>\n",
       "      <th>好友密度</th>\n",
       "      <th>真实头像</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   日志密度  好友密度  真实头像\n",
       "0     0     0     0\n",
       "1     0     2     1\n",
       "2     2     1     1\n",
       "3     1     1     1\n",
       "4     2     1     1\n",
       "5     1     2     0\n",
       "6     1     0     1\n",
       "7     2     1     1\n",
       "8     1     0     1\n",
       "9     0     0     1"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "y = np.array(list('NYYYYYNYYN'))\n",
    "print(y)\n",
    "X = pd.DataFrame({'日志密度':list('sslmlmmlms'),\n",
    "                  '好友密度':list('slmmmlsmss'),\n",
    "                  '真实头像':list('NYYYYNYYYY')})\n",
    "X['日志密度'] = X['日志密度'].map({'s':0,'m':1,'l':2})\n",
    "X['好友密度'] = X['好友密度'].map({'s':0,'m':1,'l':2})\n",
    "X['真实头像'] = X['真实头像'].map({'N':0,'Y':1})\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "08cd6173",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "#import graphviz\n",
    "from sklearn import tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "0abf482e",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>日志密度</th>\n",
       "      <th>好友密度</th>\n",
       "      <th>真实头像</th>\n",
       "      <th>真实用户</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>1</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>Y</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>N</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   日志密度  好友密度  真实头像 真实用户\n",
       "0     0     0     0    N\n",
       "1     0     2     1    Y\n",
       "2     2     1     1    Y\n",
       "3     1     1     1    Y\n",
       "4     2     1     1    Y\n",
       "5     1     2     0    Y\n",
       "6     1     0     1    N\n",
       "7     2     1     1    Y\n",
       "8     1     0     1    Y\n",
       "9     0     0     1    N"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X['真实用户'] = y\n",
    "X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "46e769cd",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "日志密度 0.5 0.3047619047619048\n",
      "日志密度 1.5 0.3428571428571428\n",
      "好友密度 0.5 0.15000000000000002\n",
      "好友密度 1.5 0.375\n",
      "真实头像 0.5 0.4\n",
      "最佳裂分条件是： {'好友密度': 0.5}\n"
     ]
    }
   ],
   "source": [
    "columns = ['日志密度','好友密度','真实头像']\n",
    "lower_gini = 1 # 记录，最低信息熵，是多少\n",
    "condition = {} # 记录最佳裂分点\n",
    "for col in columns:\n",
    "    x = X[col].unique()\n",
    "    x.sort()\n",
    "    # 如何划分问题\n",
    "    for i in range(len(x) -1):\n",
    "        split = x[i:i+2].mean()\n",
    "        cond = X[col] <= split\n",
    "        p = cond.value_counts()/cond.size\n",
    "        indexes = p.index\n",
    "        gini = 0\n",
    "        for index in indexes:\n",
    "            user = X[cond == index]['真实用户']\n",
    "            p_user = user.value_counts()/user.size\n",
    "            gini += (p_user * (1-p_user)).sum() * p[index]\n",
    "        print(col,split,gini)\n",
    "        if gini < lower_gini:\n",
    "            condition.clear()\n",
    "            lower_gini = gini\n",
    "            condition[col] = split\n",
    "print('最佳裂分条件是：',condition)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa3cc959",
   "metadata": {},
   "source": [
    "### 决策树实战"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "29d59ec6",
   "metadata": {},
   "source": [
    "#### 决策树分类鸢尾花数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "4cbadcaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import datasets\n",
    "from sklearn import tree\n",
    "from sklearn.tree import DecisionTreeClassifier\n",
    "from sklearn.model_selection import train_test_split\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "94f5ac75",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "真实类别是： [0 2 1 0 2 1 0 1 1 1 2 2 2 0 0 1 2 1 0 2 1 0 1 1 2 0 0 1 0 0 2 0 2 2 1 2 0\n",
      " 0]\n",
      "算法预测是： [0 2 1 0 2 1 0 1 1 1 2 2 2 0 0 1 2 1 0 2 1 0 1 1 2 0 0 1 0 0 2 0 1 2 1 2 0\n",
      " 0]\n",
      "准确率是： 0.9736842105263158\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[1., 0., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 1., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 1., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 0., 1.],\n",
       "       [1., 0., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 1., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 1., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [1., 0., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [1., 0., 0.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [0., 1., 0.],\n",
       "       [0., 0., 1.],\n",
       "       [1., 0., 0.],\n",
       "       [1., 0., 0.]])"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "iris = datasets.load_iris()\n",
    "X = iris['data']\n",
    "y = iris['target']\n",
    "name = iris['target_names']  # 特征，画图时使用\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X,y, random_state=256)\n",
    "model = DecisionTreeClassifier(max_depth=None, criterion='entropy')\n",
    "model.fit(X_train,y_train)\n",
    "y_ = model.predict(X_test)\n",
    "\n",
    "print('真实类别是：',y_test)\n",
    "print('算法预测是：',y_)\n",
    "print('准确率是：',model.score(X_test,y_test))\n",
    "\n",
    "model.predict_proba(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "65d0ab66",
   "metadata": {},
   "source": [
    "#### 决策树剪枝"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "14b3ddd1",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "真实类别是： [0 2 1 0 2 1 0 1 1 1 2 2 2 0 0 1 2 1 0 2 1 0 1 1 2 0 0 1 0 0 2 0 2 2 1 2 0\n",
      " 0]\n",
      "算法预测是： [0 2 1 0 2 1 0 1 1 1 2 2 2 0 0 1 2 1 0 2 1 0 1 1 2 0 0 1 0 0 2 0 1 2 1 2 0\n",
      " 0]\n",
      "准确率是： 0.9736842105263158\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "array([[1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [0.        , 0.90243902, 0.09756098],\n",
       "       [0.        , 0.02857143, 0.97142857],\n",
       "       [1.        , 0.        , 0.        ],\n",
       "       [1.        , 0.        , 0.        ]])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#剪枝主要是调整max_depth的大小\n",
    "model = DecisionTreeClassifier(max_depth=2, criterion='entropy')\n",
    "model.fit(X_train,y_train)\n",
    "y_ = model.predict(X_test)\n",
    "\n",
    "print('真实类别是：',y_test)\n",
    "print('算法预测是：',y_)\n",
    "print('准确率是：',model.score(X_test,y_test))\n",
    "\n",
    "model.predict_proba(X_test)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "84a7ca85",
   "metadata": {},
   "source": [
    "#### 超参数max_depth的选择"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "d7d9e53b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAwIAAAIhCAYAAAD98w2UAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAABVqUlEQVR4nO3deViU5f7H8c+whELgAiguuKR53NdMM1M7ZuWSW7lUmmZ1LDMrS03NyqzM0iyX1DqVppJL2mJpSouGqWk/M5fUPBpKIiIiICIwwPz+mJgiQAaF52Fm3q/r8nLmmXlmvvM92JkP930/t8Vms9kEAAAAwKN4mV0AAAAAAOMRBAAAAAAPRBAAAAAAPBBBAAAAAPBABAEAAADAAxEEAAAAAA9EEAAAAAA8EEEAAAAA8EAEAQAwwP/+9z+1bt1al7uH48qVKzV48OBin5edna1rrrlGGzduvKz3/ac1a9aoWrVqevPNN4t1XkZGhurVq6eXXnqpWOd16tRJq1evznOsdevW2rVrV7FepzA33HCDli9fXiKv5azRo0frpptu0vnz5w19XwD4J4IAAJSwrVu3qlatWpo6dar69++vAwcO6Pjx47rmmmt08803q3v37lq2bFmB527atEn/+9//8h1v3bq1fv3112LXcuTIEf3+++9KSUlx+pz58+frwQcf1IkTJ/IcP3z4sJ588kl1795dvXr1KlYdfn5+at68uWJjY4t1Xlpampo0aaJDhw4pKSlJ+/bt05kzZ7Rp0yY9/PDDGjhwoGJiYgo8NyMjQ40bN1ZkZGShr9+rVy99+eWXBT726aef6sCBA5Kk1NRUbd26VXFxcfr++++1YMECPfbYY+rXr5/q1KmjtWvXOv2Z5s2bp/vvv187duzQ7NmzNWnSJJ09e9bp8wGgpPiYXQAAuJv58+frnXfeUbly5TRw4EDVqlVL77//viZMmKBWrVrJx6fw//TabDa1bNlSO3fuVOPGjfXJJ59oz549GjZsmFq0aKG0tDRdddVVl3yNv3vnnXd0//3364svvlCPHj0UEBBQ5DlDhw7VqlWrNGXKFC1ZskSStGLFCk2cOFHPPfecHnzwwUuev2nTJvn7+6tjx455jleqVElNmjRxqm5J2rZtm9LT0/XEE0+oXr16evTRRzVjxgytWrVKaWlpGj9+vHx9fQs938/PT23btpWXV+G/87rmmmtktVoLfCwnJ0etW7fW/v379f3332vmzJmqX7++2rdvr06dOmnEiBHKyspSzZo1NWPGDHXo0EFhYWH5Xufs2bNavXq1bDabTp06peTkZKWlpWnfvn264YYb1KtXLwUHBzvdFwAoKYwIAEAJWrdunZo0aaLExEStWbNGjRo10scff6znn39e27Zt07x58y55/m233aZNmzYpJCREkvT5558rOTlZc+fO1f79+/X000/rhx9+cKqWEydOKCIiQtOnT9e4ceM0dOhQZWZmFnleUFCQvvnmG7366quSpISEBNWqVUuzZ8/Wu+++W+T5/v7+6tq1q8aPH5/neE5Ojs6cOaOZM2fqvvvu08GDBwt9jfT0dL3//vt66623dMMNN2jBggW6ePGixo0bp+uuu07r16/PN2WoIBUrVlSDBg0kSVlZWYqMjNQjjzyi6OhoSfZwUqFChQLP7d+/v7744guFhYVp5syZWrZsme677z61bNlSTZs21eLFi3XixAn98ssv+vHHHwsMAZJktVr1yiuv6JFHHtH111+vfv366d1339WNN96o2bNn69prry3ycwBAaSAIAEAJycnJkc1m07PPPqsGDRo4vggPGzZMWVlZatSokRITE9WvXz/t37+/0Nfp0KGDqlSpon379qlly5aaMWOG+vXrpyFDhujtt99Wy5Ytnapn1KhRevnll1W1alU1bdpUt99+uwYMGKD09PQiz/Xx8VG1atUkSSEhIerQoYOCg4MVFhamlStX6rHHHlPPnj21adOmfOd27NhRGzZsUOXKlSVJjz32mFq1aqWNGzeqYsWK6tevn3744QdNnDix0PePiorSa6+9pq5du6pdu3b6/fffNWrUKMXGxmrBggV66qmndM899xT5OS5evKhvvvlGy5cv1+zZs5WcnKz33ntPqampio2N1ZEjR/Ttt9/qnnvu0YgRIxy9+fbbb3Xx4kV169ZNgYGBeu6551S7dm2tWrVKN954oypVqiQ/Pz+NHz9etWrVumQNVqtVV199tSSpdu3a+vDDD3XhwgWdOXNG586d04ABA9S7d28lJiYW+XkAoCRZbJe7cg0AkE9cXJzCwsI0efJkValSRf/5z3/03//+Vzt37lRMTIxefvllNWnSRBUrVsx3blJSkqZMmaLExEQtX75cx44dU3p6uvbv36+vv/5ax48fV40aNXTx4kX17dtXgwYNKrSO2bNna8eOHVq5cmWe4wMGDFBcXJxWrFihGjVqFFj/Z599pi1btmjKlClKSkrSzp07Vb58eR09elT79+/XXXfdpZCQEPn7+6tx48aOwFCU22+/XQsXLlTt2rVVqVIlbdu2TY0bN77kOfHx8YqIiNAff/yh1atX65lnnlHbtm3VqlUreXt7F3jOjz/+qPnz5+v//u//dPToUT3xxBMaMmSIwsLClJycrCeffFIdO3bU9u3bVa1aNQUEBOj55593fFmXpAkTJmjbtm2KiopyHHv33Xc1ZMgQvfDCC7r//vvVsGFDpz73nj17NHr0aPXp00fHjx/XDz/8oD59+uh///ufevfurb59++qqq65y6rUAoCSxRgAAStCDDz6oL774QqGhoQoODlb58uX12GOP6cyZM2rTpo1iYmK0YsUKDRgwQJ06dXKcFxMTo/fff1/R0dGO36Rv2LBBoaGh+uqrrzRp0iRNmjRJr7zySqFTUHKtXbtWa9as0caNG/XLL79oy5YtioyMlLe3t+bPn68OHTqoadOmmjBhgh555BHH1JiUlBRFRUWpRo0a2rJli2bOnKlGjRrphhtukCR99tlnat68ue69916nerF582Z17NjRsZ4hISFBYWFhOnTokFq2bKkqVarol19+UePGjQuc65+enq7Q0FANHjxYBw4c0MaNG5Wdna3169dr6NCheuCBB/T000/nO69du3Zq2LChYmJidOONN2r69OmyWCyaNGmSrr76ag0ePFgNGjTQk08+qV9++UWRkZF5QoAkzZgxQ8ePH9eRI0eUk5OjBg0a6I477tDu3bu1d+9eTZkyRefPn9eRI0fUunVrrVq1ShaLpcA+HDt2TE2aNNHIkSPl7e2t8ePHa/LkyRoyZIi8vLwIAQBMw9QgAChBZ8+e1cWLF3X+/HlVqlRJM2bM0LPPPqvVq1crNDRUN954o0JCQjRw4MA8lxINDw/X888/r1q1aumhhx6SJD366KMaOHCgDh48KD8/P1ksFkdIKMzKlSu1cOFCrV+/Xh999JGef/55RUdHa8iQIXr33XdVo0YNffrppwoJCdGLL76o5s2ba/HixZLsawMGDBigtLQ0jR07VtWrV5ckffTRR/r3v/+ts2fPql69evrxxx/VqFEj7dixo9A6Tp8+re+//17Z2dk6cuSINm7cqFOnTmny5MmOKT4333yz7rrrLj322GMFvkZUVJSuueYaRUVFKTg4WPXr19fo0aP13HPPqX79+mrevHmh71+hQgW9+OKL6ty5s3r06KFPP/1UTz31lGbOnKkePXpo7969evjhh+Xt7a0LFy4U+Bq1a9fWa6+9pgYNGuj111/Xa6+9ph9++EEbN27Uvffeq6+++kpHjx7V6tWrCw0BkvTzzz+rRYsWCgoKUvny5XX+/Hm99957Gjx4sDp06FDoeQBQ2hgRAIASlJycrPLly+vs2bOqVq2aUlNTZbVa1bNnT61du1bh4eGqUaOGOnXqVOCXx3r16uVZvLpu3Tp16tRJ4eHheX57HBcXp8TExDxTa95//33Fx8dr/fr18vHx0YMPPpjnCj9ZWVmSpFatWunIkSOFfoZrr702z6VDb775Zs2aNUsjRoxw1JSRkaHatWsXeH5WVpaGDx+umTNn6q677lL16tUVFhYmi8WiMWPGFHreP3Xr1k2NGzfWgAED9N577+n3339XamqqHn30UcXExOjWW28t9NylS5eqbdu2OnjwoF5//XXt27dPMTExql69up577jm99dZbuuaaa+Tj41NoEPjkk08UEhIii8XiWO/Rr18/DRgwQD/88IMsFov69OlT5Of46aef9Morr0iS5s6dq9jYWB09elTr1q3TyJEj9csvvzg9vQoAShJBAABKSEJCgvz8/CRJv/76q6699lodOnTIcXnK3CkyycnJCg0NLfA1hg0bpg8//FDNmjXT1q1b9dVXX+mNN96QZL/Czf/+9z+FhIRo1qxZatCgQZ4gkPtFXZJeeukl+fj4KD09XRaLRRcuXFBERITCwsL00UcfXfJKNa1atdLUqVM1duxYeXl5KSwsTElJSRo0aJB+/fVXHT58WHfeeWeBX15TU1P1n//8R7Vr11aTJk20bt06SdKcOXM0evRoTZkyRR988EGh8/v/6ZNPPtGWLVv03XffKSQkRM8995xGjBhxyQW6O3fu1I4dOzRv3jwNGjRIwcHBuummmzRo0CBt2bJFHTp00I4dO9SlSxft3bu3wD0Wfv75Z40ePTrPYuiXX35ZHTp0UHJysgYOHKi3335bP/zwg6ZNm+b43/2fzp07p99++02tWrXSxYsXddVVV2nhwoW65ppr1KhRIz333HOEAACmIQgAQAkJDg7W/PnzdfbsWZ0/f16BgYHavXu3WrRoIcm+R8BLL72kGTNm5NthNz09XXv37tXBgwcVExOjhIQEeXl5af78+Y7njB07VmPGjFFsbKwaNmx4yavmpKenKyEhQbNmzXLsHVC+fHnNmjVLaWlpRX6WJk2aKD4+3rEe4brrrlOPHj103333KSQkROHh4QWeN2nSJK1cuVK//fab41hmZqYWL16syMhIffjhh3rooYf03//+95LX98+1ceNGLVmyRO+9954GDBigV155RYMHD1aTJk00adKkfPsi5OTk6NixY5o3b54sFovi4+MlSa+++qomTpyo4OBgvfXWWzp16pQk+xV9kpKS8r3vkiVLVL58ece+B6+++qoSEhI0e/ZsjR07Vunp6Zo7d666d++uBg0aaMKECRowYEC+gLd69WrHmory5cvr7rvv1jPPPKO4uDhdf/31Gj16dJE9AIBSYwMAlKgpU6bYFi5caLPZbLaNGzfaDhw4YDtz5oytS5cutvT0dNvQoUNtSUlJec759NNPbZUqVbKtXr3alp2dbTt9+rQtOTnZFh0dfVk1bNu2zXbXXXflOfbggw/a3nrrrUue07lzZ1vTpk1tzZo1s3Xp0sX2yiuv2Pbs2WO7cOGCU++7fft2W8+ePfMcGz16tO3ZZ5+12Ww2m9VqtTVv3tzWp08fW0JCQqGvk5GRYXv22WdtTz31lM1qtdri4+NtnTp1cjw2cOBAW+XKlW2PPvqobePGjbbU1NQCX6dWrVq2U6dO2Q4cOFDg499++63t9ttvz3f8448/to0cOdKWnp5umz59uu2zzz5zPDZgwADbN998Y7PZbLaUlBRb3759bc2aNbP17NnTFhUV5Xheenq67cYbb7TFx8c7jmVmZtpeeOEFW5cuXWz9+/e3HTlypNAeAEBp4/KhAFCC9u/frylTpmjNmjV5fuN9+vRpDRo0SJs3by703NxRhL87fPiwVqxYoXPnzqlt27a69tpr5e/vr6SkJMXHxys2NlYjRoyQv79/nvMuXryo5s2b6/7779exY8d05MgRbd++XcuXL9eAAQMKreHXX39Vo0aNZLFYlJqaqk2bNunzzz/X5s2bFR4errp16yo0NFTlypWTzWZTenq6rFarHnvsMcfGXTk5OY7P/sorr+jnn3/WihUrHNOB9uzZoxtuuEHlypXTyJEj9dBDD6levXqOGk6cOKF3331XvXv3Vtu2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wguqU6eOhg8fbl5RboSpQXDKq6++qvvuu88RAlauXKnMzEyTqwIuX/v27RUTE6Nz585Jsq994Td6Ja9y5co6f/68478XGRkZuvrqqwkBpeiJJ57Qpk2bHPfj4uK4+EAp2Ldvn/bu3avevXtLkrKyshQREWFyVUDxMCKAIi1ZskTz58/XqlWrJEk2m01nzpzRoEGDTK4MuHw+Pj5avny5XnzxRbVv314HDhzQlClTzC7L7Xh7e2vevHmaMmWKmjZtqujoaC1cuNDsstzGmTNntGTJEh05ckSbNm3Srbfeqs6dOys6OlpLly5VUlKSRo8eLS8vfu93Jf7Z586dO2vw4MHy9fXVnDlzJNkvQDBu3DiTK3V9Bf1Mo/RYbFyMFQAAAPA4/IoAAAAA8EAEAQAAAMADEQQAAAAAD0QQAAAAADwQQQAAAADwQAQBAAAAwAMRBAAAAAAPRBAAAAAAPBBBAAA8wBtvvKE2bdooOjraqeevX79e1113XZ5jH374oe69994SqWfZsmXq0aOHkpKSSuT1nLF//37961//0uLFiw17TwAoywgCAOABunbtqt27d8vf39+p56elpalt27Y6efKkDh06JEn6/PPP5efnpwkTJmjAgAGaN29eoee/+eab6t27d6GPDx48WJs3b1Z8fHy+x06fPq2lS5cqMzNTkrRx40ZdvHhRv/76q9asWaMXXnhBI0aMUKNGjXT33XcrMTHRqc/UtGlTbdiwQTk5OVq5cqUmTZqkTz/91KlzAcAdWWw2m83sIgAAJSMxMVFffPGFevbsqeDgYMfxEydOqE2bNjpz5oxTr3PHHXcoIyNDQUFB6tChgzp06KBly5Zp6NChCgkJUb169S55/u+//6777rtPUVFRhT6ncePG2r9/v7y88v5Oymq1qkOHDmratKn++9//6l//+pfq16+v8PBwdenSRZ06dVJ4eLimTZumuXPnavz48Xr66acLfI/169crLi5O8fHxOnfunFJSUuTr66vg4GDdcsstat68uQIDA53qCQC4G0YEAMCNVKpUSatWrVKDBg0UExPjOJ6Tk6OKFStqxYoVevTRR/X6668rJyenwNdYsWKFhgwZopYtW2rKlCkaO3asDh48qDlz5shms2nMmDFF1lGxYkU1aNDAcf/UqVOaOnWqFi5c6DhWs2bNfCFAknx9fbVhwwbdf//9+vjjj9WoUSOtX79eXl5eGjRokPbs2aOoqCj16tVLp06dKjQESPZRDEl65plnZLFYNHfuXM2ZM0cff/yxzp8/TwgA4NEIAgDgRiwWiz7++GPdd999yszM1M6dO9WhQwfdeeedCgoKUt26ddWoUSNNmDBBe/bsyXd+amqqgoKCNGjQID388MPy8/PTI488oqSkJH3wwQeKjY3Vl19+WWQdFy9eVGJiopYuXaoFCxZo3bp1OnTokKKiopSWlqZ9+/YpNTVV48aNU69evbRu3TpJ0tGjR3Xw4EGFhISoU6dOql+/vmbNmqU333xTHTp0kI+Pj9q1a6epU6cqKSlJ3t7el6zDarXq6quvliQdOXJEJ0+e1LFjx2SxWLR48WLdcsstev/994vfaABwA0wNAgAPsGPHDi1cuFCLFy/WrFmztHPnTq1cufKS56xfv167du3SV199pcaNG6tXr17q2LGjQkNDCz3n+eef1w8//KC9e/eqdu3aGj16tG655RbVqFFDQ4cOVZ8+fbRs2TLVrFlTP/30k5YvX65rrrlGFotFkhQdHa327dtr2bJluuWWWyRJ+/bt05kzZxQcHKyPP/5Y06ZNc/pz9+3bV+3atdO5c+f03XffqV27dmrUqJE+/vhjffbZZwoMDHS8NwB4Gh+zCwAAlLysrCxFRUXp5ptvliSdOXNG1atXlyTt3LlTDz30kA4dOqSrr75aNWvWzHf+xYsX9e9//1vh4eE6evSoKlasqOjoaH3yySfavXu3vv76a4WFheU779lnn1V6erpGjRqlJk2aaNiwYdq5c6fWr1+vkydP6uabb1bz5s3VoEED9e/fP99agzp16mjfvn0KCAjQF198oV69eql+/fry8fHRnj17tGzZMkVHR+vgwYO6cOGC3nzzTd12222F9uHYsWOaM2eOI7yMGzdOsbGxeuedd3T11VcTAgB4NIIAALih119/XUOHDtWZM2f0+++/68svv1R0dLTuv/9+7dq1SwcPHlROTo4yMjL06aefqkmTJnnOv+2229SqVSv16dNHYWFh6t+/v9q3b6//+7//0+OPP64qVaoU+L6+vr765ZdflJKSoq+//lobN27UN998o88//1wtW7ZUYGCgOnXqpM8++0w5OTnKysqSj0/e/ysKDQ3Vtm3bdPr0aR08eFCzZ89Ww4YN9cknn6hq1ap65513VL58+SJ7kJGRobNnz6pWrVqS7CFj+fLlCg0N1ezZswtcnwAAnoQgAABuZtOmTTp16pQ2bdqktWvXqn379tq9e7fuuOMOTZgwQVdddVWRr/Hiiy9q165dat++vUaNGqUWLVrIZrOpX79+evvttwv9En3x4kVNmTJFzz77rLZv366GDRsqKytL0dHROnDggGJiYrRixQpVqlRJ3t7eunDhgipUqJDnNbKzs/X0009rw4YNqlChgt555x1t375de/fu1cmTJ/XMM8/opZdeKnKh7549exx7IcTExOirr76Sv7+/rrvuOg0dOlSTJk3SSy+95GRXAcD98OsQAHAj3377re699149/fTTGjFihL744gs988wzysnJkc1m086dO516nS5dumjUqFF64IEHVL9+fR07dkzfffedPvvsM/Xv37/Ac2w2m5588km9/PLL8vX1lST16tVLX3/9tVq2bKmxY8dq1KhRatasmYKDg2Wz2ZSSkpLnNaxWq5588knVqFHDERDi4uI0fvx4vfrqqwoMDNQjjzyif//73/rpp58u+Rk+/vhj3XHHHZKk48eP695779Xy5ctVrVo11atX75JXGwIAT0AQAAA3kZiYqK5du6pHjx6O6TCStHz5cnXt2lVPPfWUHn74Yf38889FvlZKSopGjBihe++9Vy1atFDXrl3Vpk0bPfnkk/rhhx8KPGfnzp166qmn1Lp1a50+fVoWi0XR0dH65ptv9NRTT+nee+9V3bp1Hc+3Wq35dha+cOGC5s6dq759+0r66wv8woUL5e/vr/T0dDVs2FAvvfSSOnbsqHvuuUfbtm3TP697kZOToy+++EIDBgyQJHXs2FFBQUG688479dprr2n16tWqWLGiE10FAPdFEAAAN1G5cmX16NFDo0aNchw7duyYXnjhBY0bN04BAQF67rnn1KVLF33yySeFvs7u3bsdowq9evVSUlKSMjIydNttt2n69Onq2bOnbrrpJr399ts6cuSI47x27drp2muvdbxvbhB4/fXXZbFY5OXllWcfgZSUFKWlpeV574oVK6pZs2b697//rR9//FHvvfeeVq1apSZNmuiPP/5QamqqJPsahqVLl2r//v166qmn9Mwzzzh2Ipbs4eeuu+7KM+2oZs2aOn36tGrUqKEdO3YoOzv7MjsNAO6BNQIA4EbWrVvnmL9/7Ngx3X333VqyZIlCQkIkSQMHDtTatWvVv39/derUSY899pj69OnjmMoTERGhuLg4rVy5Uv7+/pLs8+tzv7B37txZ27Zt04gRIzR16lR9+OGH6tq1q5599tk8C3iPHDmixo0bq0uXLvlq3L17t3bs2KF9+/apRo0a+R6PiIhQtWrVVK1aNbVr185xfN++fXk2QRswYIDjN/5/Fx8fr9WrV2v16tWyWq36/vvvtXz5clksFq1YsUI1a9bU+PHjVb9+fd1///26+eab1apVK8d+AwDgKQgCAOBGckNAVFSUPvvsM61duzbfl+0lS5Zo4MCBOnv2rC5cuKDff//dsQvwPffck+81//jjjzxf8hs3bqwdO3Zcso62bdsWeFlSSWrdurW+/fZbtWvXrsDnNG3atMDzmjdvrrZt217yfSVp1apVWrp0qfz8/PTVV1/JZrPpzTffVFBQkOM5s2bN0nXXXadx48ZpxowZql69urp27aoZM2bkW7wMAO6KDcUAAJc0a9YsPfjgg3xBBgA3QxAAAAAAPBCLhQEAAAAPRBAAAAAAPBBBAAAAAPBABAEAAADAAxEEAAAAAA9EEAAAAAA8EEEAAAAA8EAEAQAAAMADEQQAAAAAD/T/1GZqkFsE9dEAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 900x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "depth = np.arange(1,16)\n",
    "err = []\n",
    "for i in depth:\n",
    "    model = DecisionTreeClassifier(max_depth=i, criterion='entropy')\n",
    "    model.fit(X_train, y_train)\n",
    "    score = model.score(X_test, y_test)\n",
    "    err.append(1-score)\n",
    "# 画图    \n",
    "plt.figure(figsize=(9,6))\n",
    "plt.rcParams['font.family'] = 'STKaiti'\n",
    "plt.plot(depth,err,'ro-')\n",
    "plt.xlabel('决策树深度',fontsize = 12)\n",
    "plt.ylabel('错误率',fontsize = 12)\n",
    "plt.title('筛选合适决策树深度')\n",
    "plt.grid()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "bb8069c0",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.        , 0.01126989, 0.06769757, 0.92103253])"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.feature_importances_"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d6ff7035",
   "metadata": {},
   "source": [
    "### 决策回归树"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "517dcb77",
   "metadata": {},
   "source": [
    "#### 与线性回归对比"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "1d992320",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import graphviz\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn import tree"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "026d5350",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x17c422cb940>"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAASgAAAESCAYAAABO5kjSAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAeBUlEQVR4nO3dfXBU1d0H8O8ukA0UkjQPkE1KCkEsiCDBUNJlLOBjfMIDw5Bpp4WIBikEYYojxkGSjsBE2kml1sFa+mC1GK20oDO8KGAsE7CMsiYlLwOEwDQhEgQ2CCm7ASEMu+f5I2R1yWazL/fePXvv9zOzf+Ry7u65e8/5ce+55/zWJIQQICKSkDnaFSAi6g0DFBFJiwGKiKTFAEVE0mKAIiJpMUARkbQYoIhIWv2jXQGleTweXLhwAUOGDIHJZIp2dYjoLkIIdHR0IC0tDWZz4Gsk3QWoCxcuID09PdrVIKI+nDt3DiNGjAhYRncBasiQIQC6Dj4hISHKtSGiu7lcLqSnp3v7aiC6C1Ddt3UJCQkMUEQSC2YIhoPkRCQtBigikhYDFBFJS3djUKQvt2578Ff7Fzjb/jVGJg/CE7ZRiOvP/1eNQtUzffjwYcydOxdpaWkwmUzYvXt3n/t88sknePDBB2GxWDBmzBiUl5erWUVSkdsjYG++gj3152FvvgK3J7TUY2X7T2Lc2o+wYV8j3rGfxYZ9jRi39iOU7T+paT0oelS9grp+/TomTZqEX/ziF/jJT37SZ/mWlhbMmTMHy5cvx7Zt21BZWYmlS5ciNTUVubm5alaVFFZx4iJKPzyJi86b3m2pifFYP3c8Zk1I7XP/sv0n8frhlh7bPQLe7SWzx6teD4ouk1YZNU0mE3bt2oW8vLxey6xZswb79u3DiRMnvNsWLFiAq1evoqKiIqjPcblcSExMhNPp5DSDKKk4cREr3q3F3Q2r+6Hy/z3+YMDgcOu2B+PWfoRAFzpmE3Bqw/8GvN2LtB6kjlD6qFQ383a7HTk5OT7bcnNzYbfbe92ns7MTLpfL50XR4/YIlH54skdQAODdVvrhyYC3WX+1fxEwOAFdV1J/tX+haj0o+qQKUA6HAykpKT7bUlJS4HK5cOPGDb/7lJWVITEx0fviMhdlhDtuU93S7nM7dTcB4KLzJqpb2nstc7b966A+K1A5JerRjWNY0RPzT/FKSkpQVFTk/bt7Gj2FL5Jxm0sdvQeFYMuNTB4U1HsEKqdEPQCOYUWbVFdQVqsVbW1tPtva2tqQkJCAgQMH+t3HYrF4l7VweUvkusdt7r76cDhvYsW7tag4cTHg/sOHxAf1OYHKPWEbBXMfqyDMpq5yatYj0u+CIidVgLLZbKisrPTZduDAAdhstijVyFiUGLeZmpGM1MR49BZfTOi6Apmakdzre8T1N6PwxxkB61r444yAA+SR1oNjWHJQNUBdu3YN9fX1qK+vB9A1jaC+vh6tra0Aum7PCgoKvOWXL1+OM2fO4Pnnn8epU6fwpz/9Ce+99x6effZZNatJdygxbtPPbML6uV2P/+8ODt1/r587Hv36uEQqmT0eT03P6HElZTYBT03P6HOKQaT1UHIMi8Kn6hjU0aNH8fDDD3v/7h4rWrRoEcrLy3Hx4kVvsAKAjIwM7Nu3D88++yxeffVVjBgxAm+++SbnQGlEqXGbWRNS8X+PP9hj7MYa4thNyezxeO5/xoU9kzySeij1XVBkVA1QM2fORKBpVv5mic+cORN1dXUq1op6o8S4TbdZE1Lx6HgrqlvacanjJoYP6bqd6uvK6W5x/c1Y8uPRIe2jRD2U/C4ofDH/FI/8c3tEyJ2ye9zG4bzpd+zFhK6rj0DjR9/Wz2yC7Z7/Cr3yCgunHkp+F+GcC+rCAKVD4T4a7x63WfFuLUyAT8cMZfxID5T6LjhNITJSPcWjyEX6aLx73Maa6HvrYk2MN9zSkEi/C05TiJxma/G0YuS1eG6PwEMvHez16VP3bcmna/67z//5eVvyjXC+CyXPhd6E0kd5i6cjoTwa72tMRpbxIxmE810oeS6MjLd4OsJH4/LguVAGA5SO8NG4PHgulMEApSNKLDMhZfBcKIMBSkeUWmZCkeO5UAYDlORCzUXEaQLyiPRcMA8VpxlILZJJfpwmII9wzoWeJ3iG0kcZoCTFfNrGpfdzH7M5yakLcxEZF8+9LwYoCTEXkXHx3PtigJIQJ/kZF8+9LwYoCXGSn3Hx3PtigJIQJ/kZF8+9LwYoCXGSn3Hx3PtigJIUJ1waF8/9NzgPSnKccGlcej33zAclqXAaHPMyGVc4515vQY0BSiN6XrpActBjG+MYlAaYm5rUptc2xgClMi5dILXpuY0xQKmMSxdIbXpuYwxQKuPSBVKbntsYA5TKuHSB1KbnNsYApTIuXSC16bmNMUCpjEsXSG16bmMMUBrg0gVSm17bGJe6aEhvs3xJPrHQxrjURVJctkJq01sb4y0eEUmLV1AKiIXLaqK7xUK7ZYCKkB4XaJL+xUq75S1eBPS6QJP0LZbaLQNUmPS8QJP0K9baLQNUmPS8QJP0K9baLQNUmPS8QJP0K9baLQNUmPS8QJP0K9baLQNUmPS8QJP0K9baLQNUmPS8QJP0K9barSYBavPmzRg1ahTi4+ORnZ2N6urqXsuWl5fDZDL5vOLj5bjcvJteF2iSvsVSu1V9ouaOHTtQVFSELVu2IDs7G5s2bUJubi5Onz6N4cOH+90nISEBp0+f9v5tMskRzf2ZNSEVj463Sj8jl+jbYqXdqh6gXnnlFRQWFmLx4sUAgC1btmDfvn3YunUriouL/e5jMplgtVqDev/Ozk50dnZ6/3a5XJFXOkR6W6BJxhAL7VbVW7xbt26hpqYGOTk533yg2YycnBzY7fZe97t27RpGjhyJ9PR0zJs3Dw0NDb2WLSsrQ2JioveVnp6u6DEQUfSoGqAuX74Mt9uNlJQUn+0pKSlwOBx+9xk7diy2bt2KPXv24N1334XH48G0adPw5Zdf+i1fUlICp9PpfZ07d07x4yCi6JBusbDNZoPNZvP+PW3aNNx33314/fXXsWHDhh7lLRYLLBaLllUkIo2oGqCGDh2Kfv36oa2tzWd7W1tb0GNMAwYMwOTJk9HU1KRGFfsUCykpiNQgQ9tXNUDFxcUhKysLlZWVyMvLAwB4PB5UVlZi5cqVQb2H2+3G8ePHMXv2bBVr6l+spKQgUposbV/1eVBFRUV444038Pbbb6OxsRErVqzA9evXvU/1CgoKUFJS4i3/4osv4h//+AfOnDmD2tpaPP744zh79iyWLl2qdlV9xFJKCiIlydT2VR+Dmj9/Pr766iusW7cODocDmZmZqKio8A6ct7a2wmz+Jk7+5z//QWFhIRwOB7773e8iKysLR44cwfjx49WuqldfKSlM6EpJ8eh4K2/3SFdka/v8VRc/7M1XkP/G532W+3vhj6SfR0IUCi3afih9lGvx/Ii1lBRESpGt7TNA+RFrKSmIlCJb22eA8iPWUlIQKUW2ts8A5UespaQgUopsbZ8BqhexlJKCSEkytX0+xeuDDLNpiaJBrbYfSh+Vbi2ebGIhJQWRGmRo+7zFIyJpMUARkbQYoIhIWgxQRCQtDpLfwad1RMHRsq8wQEGe3DdEstO6rxj+Fk+m3DdEMotGXzF0gOor9w3QlfvG7dHVXFaikEWrrxg6QFW3tPf43+DbBICLzpuobmnXrlJEEopWXzF0gJIt9w2RrKLVVwwdoGTLfUMkq2j1FUMHKNly3xDJKlp9xdABSrbcN0SyilZfMXSAAuTKfUMks2j0FeaDuoMzyYmCE2lfYT6oMMiQ+4YoFmjZVwx/i0dE8mKAIiJpMUARkbQYoIhIWoYeJOeTO6LIqdmPDBugmAOKKHJq9yND3uIxBxRR5LToR4YLUMwBRRQ5rfqR4QIUc0ARRU6rfmS4AMUcUESR06ofGS5AMQcUUeS06keGC1DMAUUUOa36keECFHNAEUVOq35kuAAFMAcUkRK06EeGzgfFmeREkQu1HzEfVJCYA4oocmr2I0Pe4hFRbGCAIiJpaRKgNm/ejFGjRiE+Ph7Z2dmorq4OWP7999/HuHHjEB8fj4kTJ2L//v1aVJOIJKN6gNqxYweKioqwfv161NbWYtKkScjNzcWlS5f8lj9y5Ajy8/OxZMkS1NXVIS8vD3l5eThx4oTaVSUiyaj+FC87Oxs//OEP8cc//hEA4PF4kJ6ejqeffhrFxcU9ys+fPx/Xr1/H3r17vdt+9KMfITMzE1u2bOnz88L9VRci0kYofVTVK6hbt26hpqYGOTk533yg2YycnBzY7Xa/+9jtdp/yAJCbm9tr+c7OTrhcLp9XMNweAXvzFeypPw978xVmLyAKk5p9SdVpBpcvX4bb7UZKSorP9pSUFJw6dcrvPg6Hw295h8Pht3xZWRlKS0tDqheT1REpgwnr+lBSUgKn0+l9nTt3LmB5JqsjUkbMJ6wbOnQo+vXrh7a2Np/tbW1tsFqtfvexWq0hlbdYLEhISPB59YbJ6oiUoYuEdXFxccjKykJlZaV3m8fjQWVlJWw2m999bDabT3kAOHDgQK/lQ8FkdUTK0Kovqb7UpaioCIsWLcKUKVMwdepUbNq0CdevX8fixYsBAAUFBfje976HsrIyAMAzzzyDGTNm4Pe//z3mzJmD7du34+jRo/jzn/8ccV2YrI5IGVr1JdUD1Pz58/HVV19h3bp1cDgcyMzMREVFhXcgvLW1FWbzNxdy06ZNw9/+9je88MIL+NWvfoV7770Xu3fvxoQJEyKuC5PVESlDq75kqGwGbo/AQy8dhMN50++9swldqSI+XfPfzGpAFEAkfUmaeVCyYbI6ImUwYZ1KmKyOSBlMWBeGYC8fmayOSBlMWKcCJqsjUgYT1hGRITFAEZG0GKCISFoMUEQkLQYoIpKWYZ/ideN0A6LwaNF3DB2gmLiOKDxa9R3D3uIxcR1ReLTsO4YMUExcRxQerfuOIQMUE9cRhUfrvmPIAMXEdUTh0brvGDJAMXEdUXi07juGDFBTM5KRmhjfI49NNxO6nkhMzUjWslpE0tO67xgyQDFxHVF4tO47hgxQABPXEYVLy75j2IR13TiTnCg84fYdJqwLARPXEYVHi75j2Fs8IpIfAxQRSYsBioikxQBFRNIy/CC5P3yyR+QrWn2CAeouzBFF5CuafYK3eN/CHFFEvqLdJxig7mCOKCJfMvQJBqg7mCOKyJcMfYIB6g7miCLyJUOfYIC6gzmiiHzJ0CcYoO5gjigiXzL0CQaoO5gjisiXDH2CAepbmCOKyFe0+4Th80H5w5nkRL6U7BPMBxUh5ogi8hWtPsFbPCKSFgMUEUmLAYqIpMUARUTS4iB5iPiEj/RKxrataoBqb2/H008/jQ8//BBmsxk//elP8eqrr2Lw4MG97jNz5kz885//9Nn21FNPYcuWLWpWNSjMFUV6JWvbVvUWb+HChWhoaMCBAwewd+9eHD58GMuWLetzv8LCQly8eNH72rhxo5rVDEq08+IQqUXmtq1agGpsbERFRQXefPNNZGdn46GHHsJrr72G7du348KFCwH3HTRoEKxWq/cV7oRLpciQF4dIDbK3bdUClN1uR1JSEqZMmeLdlpOTA7PZjKqqqoD7btu2DUOHDsWECRNQUlKCr7/+uteynZ2dcLlcPi+lyZAXh0gNsrdt1cagHA4Hhg8f7vth/fsjOTkZDoej1/0ee+wxjBw5EmlpaTh27BjWrFmD06dPY+fOnX7Ll5WVobS0VNG6302GvDhEapC9bYccoIqLi/HSSy8FLNPY2Bh2hb49RjVx4kSkpqbikUceQXNzM+65554e5UtKSlBUVOT92+VyIT09PezP90eGvDhEapC9bYccoJ577jk8+eSTAcuMHj0aVqsVly5d8tl++/ZttLe3w2q1Bv152dnZAICmpia/AcpiscBisQT9fuHozovjcN70e69uQtfqbuaKolgje9sOOUANGzYMw4YN67OczWbD1atXUVNTg6ysLADAwYMH4fF4vEEnGPX19QCA1NToPerszouz4t1amACfE8lcURTLZG/bqg2S33fffZg1axYKCwtRXV2Nzz77DCtXrsSCBQuQlpYGADh//jzGjRuH6upqAEBzczM2bNiAmpoafPHFF/jggw9QUFCA6dOn44EHHlCrqkGJdl4cIrVI3baFiq5cuSLy8/PF4MGDRUJCgli8eLHo6Ojw/ntLS4sAIA4dOiSEEKK1tVVMnz5dJCcnC4vFIsaMGSNWr14tnE5n0J/pdDoFgJD2CcVtt0ccabosdtd9KY40XRa33R5VPodIa1q17VD6KBPWEZGmQumjXCxMRNLiYmGVyLjwkowrVtsjA5QKZF14ScYUy+2Rt3gKk3nhJRlPrLdHBigFyb7wkoxFD+2RAUpBsi+8JGPRQ3tkgFKQ7AsvyVj00B4ZoBQk+8JLMhY9tEcGKAV1L7zs7eGtCV1PT7iomLSgh/bIAKWg7oWXAHo0ChkWXpKx6KE9MkApTOqFl2Q4sd4euRZPJbE6c5f0Sab2GEof5UxylfQzm2C757+iXQ0iALHbHnmLR0TS4hWUBGS6/KbYYJQ2wwAVZbG8kJOiw0hthrd4URTrCzlJe0ZrMwxQUaKHhZykLSO2GQaoKNHDQk7SlhHbDANUlOhhISdpy4hthgEqSvSwkJO0ZcQ2wwAVJXpYyEnaMmKbYYCKEj0s5CRtGbHNMEBFUawv5CTtGa3NcLGwBMKdFWyU2cR6ZsRzz8XCMSachZxGmk2sV5Gcw1hd/Bsq3uLFIKPNJtYjnsPgMEDFGCPOJtYbnsPgMUDFGCPOJtYbnsPgMUDFGCPOJtYbnsPgMUDFGCPOJtYbnsPgMUDFGCPOJtYbnsPgMUDFGKVmE7s9AvbmK9hTfx725isckI1AqN+lEWeEh4sTNWNUJHNoOIdKOTwPoQuljzJAxbBwZhN3z7+5+6R376XH5RJqUeK7jOUZ4eHiTHKDCHU2cV/zb0zomn/z6Hir7jtJpJT6Lo0yIzxcHIMyEM6/UQ6/S23wCspAlJx/o6dbk3COhXOZtMEAZSBKzb/R0+BuuMfCuUza4C2egSgx/0ZPi1wjORbOZdIGA5SBRDr/RulFrkrMxQr3PSI9Fs5l0oZqAeo3v/kNpk2bhkGDBiEpKSmofYQQWLduHVJTUzFw4EDk5OTg3//+t1pVNKRIMjIqOTBcceIiHnrpIPLf+BzPbK9H/huf46GXDoZ0BRbJeyhxLEbLbhkNqo1B3bp1Cz/72c9gs9nwl7/8Jah9Nm7ciD/84Q94++23kZGRgbVr1yI3NxcnT55EfDzv5ZUya0IqHh1vjdrAcG/zh7pvrYLp3JG+h1LHEu53ScFRLUCVlpYCAMrLy4MqL4TApk2b8MILL2DevHkAgHfeeQcpKSnYvXs3FixYoFZVDSmc+TdKDAwrMX9IifdQcpCbc5nUI80YVEtLCxwOB3JycrzbEhMTkZ2dDbvd3ut+nZ2dcLlcPi9ShxIDw0rcWinxHhzkjg3SBCiHwwEASElJ8dmekpLi/Td/ysrKkJiY6H2lp6erWk8jU2JgWIlbKyXeg4PcsSGkAFVcXAyTyRTwderUKbXq6ldJSQmcTqf3de7cOU0/32giHRhW4tZKqdszDnLLL6QxqOeeew5PPvlkwDKjR48OqyJWqxUA0NbWhtTUbxpGW1sbMjMze93PYrHAYrGE9ZkUnkgGhrtvrRzOm37HkEzoChCBbq2UeA8ljoXUF1KAGjZsGIYNG6ZKRTIyMmC1WlFZWekNSC6XC1VVVVixYoUqn0nhC3dguPvWasW7tTABPgEm2FsrJd7j7vfjILecVBuDam1tRX19PVpbW+F2u1FfX4/6+npcu3bNW2bcuHHYtWsXAMBkMmHVqlX49a9/jQ8++ADHjx9HQUEB0tLSkJeXp1Y1KQqUuLXi7ZlBCJUsWrRIoOs/N5/XoUOHvGUAiLfeesv7t8fjEWvXrhUpKSnCYrGIRx55RJw+fTqkz3U6nQKAcDqdCh0JqeW22yOONF0Wu+u+FEeaLovbbk9U3oO0FUofZcI6ItJUKH1UmmkGRER3Y4AiImnpLh9U9x0rZ5QTyam7bwYzuqS7ANXR0QEAnFFOJLmOjg4kJiYGLKO7QXKPx4MLFy5gyJAhMJkCz4NxuVxIT0/HuXPndDOgzmOSn96OBwjtmIQQ6OjoQFpaGszmwKNMuruCMpvNGDFiREj7JCQk6KahdOMxyU9vxwMEf0x9XTl14yA5EUmLAYqIpGXoAGWxWLB+/XpdLTbmMclPb8cDqHdMuhskJyL9MPQVFBHJjQGKiKTFAEVE0mKAIiJpMUARkbQMFaD0+GvH7e3tWLhwIRISEpCUlIQlS5b4ZC31Z+bMmT1+7GL58uUa1di/zZs3Y9SoUYiPj0d2djaqq6sDln///fcxbtw4xMfHY+LEidi/f79GNQ1OKMdTXl7e43zI9kO1hw8fxty5c5GWlgaTyYTdu3f3uc8nn3yCBx98EBaLBWPGjAn6NzK/zVABqvvXjkPJcd79a8dbtmxBVVUVvvOd7yA3Nxc3bwb300dqW7hwIRoaGnDgwAHs3bsXhw8fxrJly/rcr7CwEBcvXvS+Nm7cqEFt/duxYweKioqwfv161NbWYtKkScjNzcWlS5f8lj9y5Ajy8/OxZMkS1NXVIS8vD3l5eThx4oTGNfcv1OMBupaIfPt8nD17VsMa9+369euYNGkSNm/eHFT5lpYWzJkzBw8//DDq6+uxatUqLF26FB9//HFoH6xaXk+JvfXWWyIxMbHPch6PR1itVvG73/3Ou+3q1avCYrGIv//97yrWMDgnT54UAMS//vUv77aPPvpImEwmcf78+V73mzFjhnjmmWc0qGFwpk6dKn75y196/3a73SItLU2UlZX5Lf/zn/9czJkzx2dbdna2eOqpp1StZ7BCPZ5g26MsAIhdu3YFLPP888+L+++/32fb/PnzRW5ubkifZagrqFCF+2vHWrHb7UhKSsKUKVO823JycmA2m1FVVRVw323btmHo0KGYMGECSkpK8PXXX6tdXb9u3bqFmpoan+/YbDYjJyen1+/Ybrf7lAeA3NxcKc5JOMcDANeuXcPIkSORnp6OefPmoaGhQYvqqkapc6S7bAZKCvfXjrXicDgwfPhwn239+/dHcnJywPo99thjGDlyJNLS0nDs2DGsWbMGp0+fxs6dO9Wucg+XL1+G2+32+x339iOwDodD2nMSzvGMHTsWW7duxQMPPACn04mXX34Z06ZNQ0NDQ8iZOWTR2zlyuVy4ceMGBg4cGNT7xPwVlIy/dhwptY9p2bJlyM3NxcSJE7Fw4UK888472LVrF5qbmxU8CgqWzWZDQUEBMjMzMWPGDOzcuRPDhg3D66+/Hu2qRV3MX0HJ+GvHkQr2mKxWa4+B19u3b6O9vd1b92BkZ2cDAJqamnDPPfeEXN9IDB06FP369UNbW5vP9ra2tl6PwWq1hlReS+Ecz90GDBiAyZMno6mpSY0qaqK3c5SQkBD01ROggwClx187DvaYbDYbrl69ipqaGmRlZQEADh48CI/H4w06waivrwcAnyCslbi4OGRlZaGystL7A60ejweVlZVYuXKl331sNhsqKyuxatUq77YDBw7AZrNpUOPAwjmeu7ndbhw/fhyzZ89WsabqstlsPaZ+hHWOQh3Bj2Vnz54VdXV1orS0VAwePFjU1dWJuro60dHR4S0zduxYsXPnTu/fv/3tb0VSUpLYs2ePOHbsmJg3b57IyMgQN27ciMYh9DBr1iwxefJkUVVVJT799FNx7733ivz8fO+/f/nll2Ls2LGiqqpKCCFEU1OTePHFF8XRo0dFS0uL2LNnjxg9erSYPn16tA5BbN++XVgsFlFeXi5Onjwpli1bJpKSkoTD4RBCCPHEE0+I4uJib/nPPvtM9O/fX7z88suisbFRrF+/XgwYMEAcP348WofgI9TjKS0tFR9//LFobm4WNTU1YsGCBSI+Pl40NDRE6xB66Ojo8PYXAOKVV14RdXV14uzZs0IIIYqLi8UTTzzhLX/mzBkxaNAgsXr1atHY2Cg2b94s+vXrJyoqKkL6XEMFqGj92rGarly5IvLz88XgwYNFQkKCWLx4sU/AbWlp8TnG1tZWMX36dJGcnCwsFosYM2aMWL16ddR/ifm1114T3//+90VcXJyYOnWq+Pzzz73/NmPGDLFo0SKf8u+99574wQ9+IOLi4sT9998v9u3bp3GNAwvleFatWuUtm5KSImbPni1qa2ujUOveHTp0yG/f6T6ORYsWiRkzZvTYJzMzU8TFxYnRo0f79KtgMR8UEUkr5p/iEZF+MUARkbQYoIhIWgxQRCQtBigikhYDFBFJiwGKiKTFAEVE0mKAIiJpMUARkbQYoIhIWv8PNiQbYcZH2mQAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 300x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#准备数据\n",
    "X_train = np.linspace(0, 2*np.pi, 40).reshape(-1,1) #训练数据\n",
    "X_test = np.linspace(0, 2*np.pi, 199).reshape(-1,1) #测试数据\n",
    "# y 一个正弦波，余弦波，圆\n",
    "y = np.c_[np.sin(X_train), np.cos(X_train)]\n",
    "#画圆\n",
    "plt.figure(figsize=(3,3))\n",
    "plt.scatter(y[:,0], y[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "cabeb3b1",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x17c427a6e50>"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAARoAAAEhCAYAAACgDm/UAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8fJSN1AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAVOklEQVR4nO3df2zV9b3H8ddpoYdWOKdUSsvRUoEKiCh2uNbiBiWWUWdg2010c4wV5qoY3GYgDposMGa2XiduLMgdxgVqMhgbCcjiUMM6FPFSGJVGft9UyqiFlip6TouXgu3n/mE8d5W29Nf79NA+H8k38Zzz/X4/n2/b8/Sc7zmc43HOOQGAoZi+ngCA/o/QADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwd92EZs+ePZozZ44CgYA8Ho9efvnlqBpv0aJF8ng8WrNmTbfH3LZtm2bNmqXk5GT5fD7l5OTo9ddf73Cb06dPy+PxXLWUlZV1ex4W88TAdt2E5uLFi5oyZYrWrVsXdeNt375dZWVlCgQCHa73eRTas2fPHs2aNUs7d+5UeXm5Zs6cqTlz5ujQoUPXnMPf//53nTt3LrxMnTr1mtt0V0/miQHKXYckue3bt7e67tKlS27p0qUuEAi4hIQEl5WV5Xbv3m023ufef/99d9NNN7kjR4649PR099vf/rbd/VRVVbmu/sgnTZrkVq1adc19Hjp0qMP9vPjii27ixInO6/W6CRMmuHXr1nVpHj2dJwa2QX2bud7zxBNP6NixY9qyZYsCgYC2b9+u/Px8HT58WLfeeqvJmC0tLZo/f76eeuop3X777Sb7b2hoUFJS0jXXnTt3ri5duqTx48frpz/9qebOnRu+bdOmTVqxYoWef/55ZWZm6tChQyosLNQNN9yggoKCiM4TA1Rfl6479IVHGP/6179cbGysq6mpabXefffd54qKinp9vM/96le/crNmzXItLS3OOdfrj2ieeeYZN3z4cFdXV9fuOvX19e65555zZWVl7sCBA27ZsmXO4/G4HTt2hNcZN26c27x5c6vtnn76aZeTk9PpufR0nhjY+kVoXnnlFSfJ3XDDDa2WQYMGuYceesg559zx48edpA6XZcuWdWo855w7ePCgS0lJaRW3tkIzadKk8HwSEhKummd+fn6bY27atMklJCS4Xbt2dfnnM3/+fPeVr3zFOedcY2Ojk+Ti4+Nbjev1et3IkSPD26SkpHT4s8nOzu71eWLg6BdPnRobGxUbG6vy8nLFxsa2um3o0KGSpLFjx+r48eMd7ufGG2/s9JhvvfWWzp8/r9GjR4eva25u1tKlS7VmzRqdPn1akrRz505duXJFklRTU6Pc3FxVVFSEt4mPj79q31u2bNEPf/hDbd26VXl5eZ2e0+eys7O1a9cuSZ/9bCTpxRdfVHZ2dqv1/v1ntXfvXn366aft7tNinhg4+kVoMjMz1dzcrPPnz+urX/1qm+vExcVp4sSJvTbm/Pnzr7pzzZ49W/Pnz9fChQvD16Wnp4f/e9Cgz37cGRkZ7e73T3/6k37wgx9oy5YteuCBB7o1t4qKCo0aNUqSlJKSokAgoFOnTmnevHntbtPRnKzmiYHjuglNY2OjKisrw5erqqpUUVGhpKQkjR8/XvPmzdP3v/99Pffcc8rMzFR9fb1KS0t15513duuO0NF4o0eP1o033njVI6DBgwcrNTVVEyZM6NYxbt68WQUFBfrd736n7Oxs1dbWSvrs0YTf75ckPf/889q+fbtKS0slSS+99JLi4uKUmZkp6bP3uGzYsEF/+MMfwvtdtWqVfvzjH8vv9ys/P19NTU06ePCgPvroIy1ZssRknkArff3crbN2797d5rmDgoIC55xzly9fditWrHC33HKLGzx4sBs1apT71re+5d59912T8drS05PBM2bMuOaYK1eudOnp6eHLJSUl7rbbbnMJCQnO5/O5rKwst3Xr1qv2vWnTJnfXXXe5uLg4N3z4cDd9+nS3bdu2jn4EPZon8O88zvHh5ABsXTfvDAZw/YrqczQtLS06e/ashg0b1uFb9wH0DeecGhoaFAgEFBPT/uOWqA7N2bNnlZaW1tfTAHAN1dXVuvnmm9u9PapDM2zYMEmfHYTP5+vj2QD4olAopLS0tPB9tT1RHZrPny75fD5CA0Sxa53a4GQwAHOEBoA5QgPAHKEBYI7QADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac6ahKS4u1pe//GUNGzZMI0eO1De/+U2dPHnSckgAUcg0NG+++aYWL16ssrIy7dq1S1euXNHXvvY1Xbx40XJYAFEmol8gV19fr5EjR+rNN9/U9OnTr7l+KBSS3+9XMBjkM4OBKNTZ+2hEP5w8GAxKkpKSktq8vampSU1NTeHLoVAoIvMCYCtiJ4NbWlr05JNP6t5779XkyZPbXKe4uFh+vz+88J1OQP8QsadOjz/+uF599VXt3bu33S+aausRTVpaGk+dgCgVVU+dnnjiCb3yyivas2dPh99m5/V65fV6IzElABFkGhrnnH70ox9p+/bteuONNzRmzBjL4QBEKdPQLF68WJs3b9aOHTs0bNgw1dbWSpL8fr/i4+MthwYQRUzP0bT3NZkbN27UggULrrk9L28D0S0qztFE8C06AKIY/9YJgDlCA8AcoQFgjtAAMEdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYI7QADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgjtAAMEdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYM40NHv27NGcOXMUCATk8Xj08ssvWw4HIEqZhubixYuaMmWK1q1bZzkMgCg3yHLn999/v+6///5Or9/U1KSmpqbw5VAoZDEtABEWVedoiouL5ff7w0taWlpfTwlAL4iq0BQVFSkYDIaX6urqvp4SgF5g+tSpq7xer7xeb19PA0Avi6pHNAD6J0IDwJzpU6fGxkZVVlaGL1dVVamiokJJSUkaPXq05dAAoohpaA4ePKiZM2eGLy9ZskSSVFBQoJKSEsuhAUQR09Dk5ubKOWc5BIDrAOdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYI7QADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgjtAAMEdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYI7QADBHaACYG9TXEwAirbnFqezUh/rv9z5QzUf/K+dcp7YLDI9XYnycPv7fyzr38aVOb3c9bn/T8HjdOy5Z94y7UbExni6N0xZC003d/WOVevYHcz39sUbj9peuNOuN/6lX06dd224g+q83TikxYbD+8z/uUP7kUT3aV0RCs27dOj377LOqra3VlClTtHbtWmVlZfXa/rt6p+ePFeicjz+5okV/fEfrv/elHsXGPDR//vOftWTJEq1fv17Z2dlas2aNZs+erZMnT2rkyJE93v9rR85p+bbD+viTK70wWwBt+flfj2rWpNRuP40yPxn8m9/8RoWFhVq4cKEmTZqk9evXKyEhQRs2bLhq3aamJoVCoVZLR147ck6L/vgOkQGM1YaadKDqQre3Nw3N5cuXVV5erry8vP8fMCZGeXl52rdv31XrFxcXy+/3h5e0tLR2993c4vTzvx4zmTeAq51vuNTtbU1D88EHH6i5uVkpKSmtrk9JSVFtbe1V6xcVFSkYDIaX6urqdvd9oOqCakPdP3AAXTNy2JBubxtVrzp5vV55vd5OrduTugLomlSfV1ljkrq9vekjmhEjRig2NlZ1dXWtrq+rq1NqamqP9t2TugLomp/Pvb1H76cxDU1cXJymTp2q0tLS8HUtLS0qLS1VTk5Oj/adNSZJqT5iA1hKTBjc45e2pQg8dVqyZIkKCgp09913KysrS2vWrNHFixe1cOHCHu03Nsajn8+dpEV/fKeXZoqBKH5wjCYHfAokxl9z3b5+syHvDO7At7/9bdXX12vFihWqra3VXXfdpddee+2qE8TdkT95lNZ/70t9/j6arvyxSrwzuK+3T0qI04ihXqX645U1JqlX7kjomMd19TcVQaFQSH6/X8FgUD6fr931Iv3OYP5Ygc909j4aVa86dVdsjEf3ZozQvRkj+noqANrAx0QAMEdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYI7QADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgjtAAMEdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYI7QADBnFppf/vKXmjZtmhISEpSYmGg1DIDrgFloLl++rAcffFCPP/641RAArhODrHa8atUqSVJJSYnVEACuE2ah6Y6mpiY1NTWFL4dCoT6cDYDeElUng4uLi+X3+8NLWlpaX08JQC/oUmiWL18uj8fT4XLixIluT6aoqEjBYDC8VFdXd3tfAKJHl546LV26VAsWLOhwnbFjx3Z7Ml6vV16vt9vbA4hOXQpNcnKykpOTreYCoJ8yOxl85swZXbhwQWfOnFFzc7MqKiokSRkZGRo6dKjVsACikFloVqxYoZdeeil8OTMzU5K0e/du5ebmWg0LIAp5nHOuryfRnlAoJL/fr2AwKJ/P19fTAfAFnb2PRtXL2wD6J0IDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgjtAAMEdoAJgjNADMERoA5ggNAHOEBoA5QgPAHKEBYI7QADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgziw0p0+f1iOPPKIxY8YoPj5e48aN08qVK3X58mWrIQFEqUFWOz5x4oRaWlr0wgsvKCMjQ0eOHFFhYaEuXryo1atXWw0LIAp5nHMuUoM9++yz+v3vf69Tp051av1QKCS/369gMCifz2c8OwBd1dn7qNkjmrYEg0ElJSW1e3tTU5OamprCl0OhUCSmBcBYxE4GV1ZWau3atXrsscfaXae4uFh+vz+8pKWlRWp6AAx1OTTLly+Xx+PpcDlx4kSrbWpqapSfn68HH3xQhYWF7e67qKhIwWAwvFRXV3f9iABEnS6fo6mvr9eHH37Y4Tpjx45VXFycJOns2bPKzc3VPffco5KSEsXEdL5tnKMBopvZOZrk5GQlJyd3at2amhrNnDlTU6dO1caNG7sUGQD9h9nJ4JqaGuXm5io9PV2rV69WfX19+LbU1FSrYQFEIbPQ7Nq1S5WVlaqsrNTNN9/c6rYIvqIOIAqYPZdZsGCBnHNtLgAGFk6aADBHaACYIzQAzBEaAOYIDQBzhAaAOUIDwByhAWCO0AAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgLqLf69RVn39IFt/vBESnz++b1/pAu6gOTUNDgyTx/U5AlGtoaJDf72/39oh+JW5XtbS06OzZsxo2bJg8Hk9fT8dEKBRSWlqaqqur+/1XygykY5UGxvE659TQ0KBAINDht5xE9SOamJiYqz7YvL/y+Xz99o/xiwbSsUr9/3g7eiTzOU4GAzBHaACYIzR9zOv1auXKlfJ6vX09FXMD6VilgXe8HYnqk8EA+gce0QAwR2gAmCM0AMwRGgDmCA0Ac4Qmwi5cuKB58+bJ5/MpMTFRjzzyiBobGzvcJjc3Vx6Pp9WyaNGiCM24a9atW6dbbrlFQ4YMUXZ2tg4cONDh+lu3btXEiRM1ZMgQ3XHHHdq5c2eEZto7unK8JSUlV/0ehwwZEsHZ9iGHiMrPz3dTpkxxZWVl7q233nIZGRnu4Ycf7nCbGTNmuMLCQnfu3LnwEgwGIzTjztuyZYuLi4tzGzZscEePHnWFhYUuMTHR1dXVtbn+22+/7WJjY92vf/1rd+zYMfezn/3MDR482B0+fDjCM++erh7vxo0bnc/na/V7rK2tjfCs+wahiaBjx445Se6f//xn+LpXX33VeTweV1NT0+52M2bMcD/5yU8iMMOeycrKcosXLw5fbm5udoFAwBUXF7e5/kMPPeQeeOCBVtdlZ2e7xx57zHSevaWrx7tx40bn9/sjNLvowlOnCNq3b58SExN19913h6/Ly8tTTEyM9u/f3+G2mzZt0ogRIzR58mQVFRXpk08+sZ5ul1y+fFnl5eXKy8sLXxcTE6O8vDzt27evzW327dvXan1Jmj17drvrR5PuHK8kNTY2Kj09XWlpafrGN76ho0ePRmK6fS6q//V2f1NbW6uRI0e2um7QoEFKSkpSbW1tu9t997vfVXp6ugKBgN59910tW7ZMJ0+e1LZt26yn3GkffPCBmpublZKS0ur6lJQUnThxos1tamtr21y/o59FtOjO8U6YMEEbNmzQnXfeqWAwqNWrV2vatGk6evRov/+UAkLTC5YvX65nnnmmw3WOHz/e7f0/+uij4f++4447NGrUKN1333167733NG7cuG7vF5GVk5OjnJyc8OVp06bptttu0wsvvKCnn366D2dmj9D0gqVLl2rBggUdrjN27Filpqbq/Pnzra7/9NNPdeHCBaWmpnZ6vOzsbElSZWVl1IRmxIgRio2NVV1dXavr6+rq2j221NTULq0fTbpzvF80ePBgZWZmqrKy0mKKUYVzNL0gOTlZEydO7HCJi4tTTk6OPv74Y5WXl4e3/cc//qGWlpZwPDqjoqJCkjRq1KjePpRui4uL09SpU1VaWhq+rqWlRaWlpa3+L/7vcnJyWq0vSbt27Wp3/WjSneP9oubmZh0+fDiqfo9m+vps9ECTn5/vMjMz3f79+93evXvdrbfe2url7ffff99NmDDB7d+/3znnXGVlpfvFL37hDh486KqqqtyOHTvc2LFj3fTp0/vqENq1ZcsW5/V6XUlJiTt27Jh79NFHXWJiYvgl3Pnz57vly5eH13/77bfdoEGD3OrVq93x48fdypUrr7uXt7tyvKtWrXKvv/66e++991x5ebn7zne+44YMGeKOHj3aV4cQMYQmwj788EP38MMPu6FDhzqfz+cWLlzoGhoawrdXVVU5SW737t3OOefOnDnjpk+f7pKSkpzX63UZGRnuqaeeisr30Tjn3Nq1a93o0aNdXFycy8rKcmVlZeHbZsyY4QoKClqt/5e//MWNHz/excXFudtvv9397W9/i/CMe6Yrx/vkk0+G101JSXFf//rX3TvvvNMHs448Po8GgDnO0QAwR2gAmCM0AMwRGgDmCA0Ac4QGgDlCA8AcoQFgjtAAMEdoAJgjNADM/R+6p7a136n6JAAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 300x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#线性回归建模\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "linerModel = LinearRegression()\n",
    "linerModel.fit(X_train, y)\n",
    "y_ = linerModel.predict(X_test)\n",
    "plt.figure(figsize=(3,3))\n",
    "plt.scatter(y_[:,0], y_[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "c88e380d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0x17c4201cc40>"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 300x300 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 决策树回归\n",
    "from sklearn.tree import DecisionTreeRegressor #决策回归树模型\n",
    "\n",
    "dModel = DecisionTreeRegressor(max_depth=2)\n",
    "dModel.fit(X_train,y)\n",
    "y__ = dModel.predict(X_test)\n",
    "plt.figure(figsize=(3,3))\n",
    "plt.scatter(y__[:,0], y__[:,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "9c6afdcb",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/svg+xml": [
       "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n",
       "<!DOCTYPE svg PUBLIC \"-//W3C//DTD SVG 1.1//EN\"\n",
       " \"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\">\n",
       "<!-- Generated by graphviz version 2.48.0 (20210717.1556)\n",
       " -->\n",
       "<!-- Title: Tree Pages: 1 -->\n",
       "<svg width=\"698pt\" height=\"314pt\"\n",
       " viewBox=\"0.00 0.00 698.00 314.00\" xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\">\n",
       "<g id=\"graph0\" class=\"graph\" transform=\"scale(1 1) rotate(0) translate(4 310)\">\n",
       "<title>Tree</title>\n",
       "<polygon fill=\"white\" stroke=\"transparent\" points=\"-4,4 -4,-310 694,-310 694,4 -4,4\"/>\n",
       "<!-- 0 -->\n",
       "<g id=\"node1\" class=\"node\">\n",
       "<title>0</title>\n",
       "<polygon fill=\"#ffffff\" stroke=\"black\" points=\"416,-306 273,-306 273,-223 416,-223 416,-306\"/>\n",
       "<text text-anchor=\"middle\" x=\"344.5\" y=\"-290.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">x[0] &lt;= 3.142</text>\n",
       "<text text-anchor=\"middle\" x=\"344.5\" y=\"-275.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.5</text>\n",
       "<text text-anchor=\"middle\" x=\"344.5\" y=\"-260.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 40</text>\n",
       "<text text-anchor=\"middle\" x=\"344.5\" y=\"-245.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[0.0]</text>\n",
       "<text text-anchor=\"middle\" x=\"344.5\" y=\"-230.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[0.025]]</text>\n",
       "</g>\n",
       "<!-- 1 -->\n",
       "<g id=\"node2\" class=\"node\">\n",
       "<title>1</title>\n",
       "<polygon fill=\"#f3c3a0\" stroke=\"black\" points=\"336,-187 177,-187 177,-104 336,-104 336,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">x[0] &lt;= 1.531</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.307</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 20</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[0.62]</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[0.025]]</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;1 -->\n",
       "<g id=\"edge1\" class=\"edge\">\n",
       "<title>0&#45;&gt;1</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M313.97,-222.91C307.21,-213.92 299.98,-204.32 293.02,-195.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"295.79,-192.91 286.98,-187.02 290.19,-197.12 295.79,-192.91\"/>\n",
       "<text text-anchor=\"middle\" x=\"283.48\" y=\"-208.07\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">True</text>\n",
       "</g>\n",
       "<!-- 4 -->\n",
       "<g id=\"node5\" class=\"node\">\n",
       "<title>4</title>\n",
       "<polygon fill=\"#f3c3a0\" stroke=\"black\" points=\"513,-187 354,-187 354,-104 513,-104 513,-187\"/>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-171.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">x[0] &lt;= 4.753</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-156.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.307</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-141.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 20</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-126.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[&#45;0.62]</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-111.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[0.025]]</text>\n",
       "</g>\n",
       "<!-- 0&#45;&gt;4 -->\n",
       "<g id=\"edge4\" class=\"edge\">\n",
       "<title>0&#45;&gt;4</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M375.38,-222.91C382.21,-213.92 389.52,-204.32 396.57,-195.05\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"399.41,-197.1 402.68,-187.02 393.84,-192.86 399.41,-197.1\"/>\n",
       "<text text-anchor=\"middle\" x=\"406.04\" y=\"-208.09\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">False</text>\n",
       "</g>\n",
       "<!-- 2 -->\n",
       "<g id=\"node3\" class=\"node\">\n",
       "<title>2</title>\n",
       "<polygon fill=\"#e58139\" stroke=\"black\" points=\"159,-68 0,-68 0,0 159,0 159,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.098</text>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 10</text>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[0.594]</text>\n",
       "<text text-anchor=\"middle\" x=\"79.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[0.671]]</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;2 -->\n",
       "<g id=\"edge2\" class=\"edge\">\n",
       "<title>1&#45;&gt;2</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M190.84,-103.88C174.74,-93.92 157.55,-83.29 141.62,-73.43\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"143.26,-70.33 132.91,-68.04 139.58,-76.28 143.26,-70.33\"/>\n",
       "</g>\n",
       "<!-- 3 -->\n",
       "<g id=\"node4\" class=\"node\">\n",
       "<title>3</title>\n",
       "<polygon fill=\"#e58139\" stroke=\"black\" points=\"336,-68 177,-68 177,0 336,0 336,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.098</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 10</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[0.646]</text>\n",
       "<text text-anchor=\"middle\" x=\"256.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[&#45;0.621]]</text>\n",
       "</g>\n",
       "<!-- 1&#45;&gt;3 -->\n",
       "<g id=\"edge3\" class=\"edge\">\n",
       "<title>1&#45;&gt;3</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M256.5,-103.73C256.5,-95.52 256.5,-86.86 256.5,-78.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"260,-78.3 256.5,-68.3 253,-78.3 260,-78.3\"/>\n",
       "</g>\n",
       "<!-- 5 -->\n",
       "<g id=\"node6\" class=\"node\">\n",
       "<title>5</title>\n",
       "<polygon fill=\"#e58139\" stroke=\"black\" points=\"513,-68 354,-68 354,0 513,0 513,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.098</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 10</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[&#45;0.646]</text>\n",
       "<text text-anchor=\"middle\" x=\"433.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[&#45;0.621]]</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;5 -->\n",
       "<g id=\"edge5\" class=\"edge\">\n",
       "<title>4&#45;&gt;5</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M433.5,-103.73C433.5,-95.52 433.5,-86.86 433.5,-78.56\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"437,-78.3 433.5,-68.3 430,-78.3 437,-78.3\"/>\n",
       "</g>\n",
       "<!-- 6 -->\n",
       "<g id=\"node7\" class=\"node\">\n",
       "<title>6</title>\n",
       "<polygon fill=\"#e58139\" stroke=\"black\" points=\"690,-68 531,-68 531,0 690,0 690,-68\"/>\n",
       "<text text-anchor=\"middle\" x=\"610.5\" y=\"-52.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">squared_error = 0.098</text>\n",
       "<text text-anchor=\"middle\" x=\"610.5\" y=\"-37.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">samples = 10</text>\n",
       "<text text-anchor=\"middle\" x=\"610.5\" y=\"-22.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">value = [[&#45;0.594]</text>\n",
       "<text text-anchor=\"middle\" x=\"610.5\" y=\"-7.8\" font-family=\"Helvetica,sans-Serif\" font-size=\"14.00\">[0.671]]</text>\n",
       "</g>\n",
       "<!-- 4&#45;&gt;6 -->\n",
       "<g id=\"edge6\" class=\"edge\">\n",
       "<title>4&#45;&gt;6</title>\n",
       "<path fill=\"none\" stroke=\"black\" d=\"M499.16,-103.88C515.26,-93.92 532.45,-83.29 548.38,-73.43\"/>\n",
       "<polygon fill=\"black\" stroke=\"black\" points=\"550.42,-76.28 557.09,-68.04 546.74,-70.33 550.42,-76.28\"/>\n",
       "</g>\n",
       "</g>\n",
       "</svg>\n"
      ],
      "text/plain": [
       "<graphviz.sources.Source at 0x17c42730190>"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#决策树可视化\n",
    "dot_data = tree.export_graphviz(dModel, filled=True)\n",
    "graph = graphviz.Source(dot_data)\n",
    "graph"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "176b3541",
   "metadata": {},
   "source": [
    "#### 决策树分裂原理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "6a7ff5e2",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 整体mse(未分裂)\n",
    "# axis = 0表示计算列的平均值，【属性】 squared_error\n",
    "round(((y - y.mean(axis=0))**2).mean(), 1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "a1bd998d",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.307"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 验证第一次裂分后，左右两个节点的mse\n",
    "cond = (X_train <= 3.142).reshape(-1)\n",
    "left = y[cond]\n",
    "right = y[~cond]\n",
    "# 计算左边的mse\n",
    "round(((left - left.mean(axis=0))**2).sum() / left.size, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "cfaf9df5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.307"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 计算左边的mse\n",
    "round(((right - right.mean(axis=0))**2).sum() / right.size, 3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "id": "9dd184ec",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True,  True,  True,  True,  True,  True,  True,  True,\n",
       "        True,  True, False, False, False, False, False, False, False,\n",
       "       False, False, False, False, False, False, False, False, False,\n",
       "       False, False, False, False])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond.reshape(-1)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "7688f47f",
   "metadata": {},
   "source": [
    "#### 决策树回归VS线性回归"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "id": "7789641d",
   "metadata": {},
   "outputs": [
    {
     "ename": "IndexError",
     "evalue": "boolean index did not match indexed array along dimension 0; dimension is 442 but corresponding boolean dimension is 3310",
     "output_type": "error",
     "traceback": [
      "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[1;31mIndexError\u001b[0m                                Traceback (most recent call last)",
      "Cell \u001b[1;32mIn[53], line 7\u001b[0m\n\u001b[0;32m      5\u001b[0m split \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mround\u001b[39m(X_train[i:i\u001b[38;5;241m+\u001b[39m\u001b[38;5;241m2\u001b[39m]\u001b[38;5;241m.\u001b[39mmean(),\u001b[38;5;241m3\u001b[39m)\n\u001b[0;32m      6\u001b[0m cond \u001b[38;5;241m=\u001b[39m (X_train \u001b[38;5;241m<\u001b[39m\u001b[38;5;241m=\u001b[39m split)\u001b[38;5;241m.\u001b[39mreshape(\u001b[38;5;241m-\u001b[39m\u001b[38;5;241m1\u001b[39m)\n\u001b[1;32m----> 7\u001b[0m left \u001b[38;5;241m=\u001b[39m \u001b[43my\u001b[49m\u001b[43m[\u001b[49m\u001b[43mcond\u001b[49m\u001b[43m]\u001b[49m\n\u001b[0;32m      8\u001b[0m right \u001b[38;5;241m=\u001b[39m y[\u001b[38;5;241m~\u001b[39mcond]\n\u001b[0;32m      9\u001b[0m mse_left \u001b[38;5;241m=\u001b[39m ((left \u001b[38;5;241m-\u001b[39m left\u001b[38;5;241m.\u001b[39mmean(axis \u001b[38;5;241m=\u001b[39m \u001b[38;5;241m0\u001b[39m))\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m2\u001b[39m)\u001b[38;5;241m.\u001b[39mmean()\n",
      "\u001b[1;31mIndexError\u001b[0m: boolean index did not match indexed array along dimension 0; dimension is 442 but corresponding boolean dimension is 3310"
     ]
    }
   ],
   "source": [
    "#手动计算最佳分裂点\n",
    "split_result = {}\n",
    "mse_lower = 0.5 # 未分裂时，mse，最大的\n",
    "for i in range(len(X) - 1):\n",
    "    split = round(X_train[i:i+2].mean(),3)\n",
    "    cond = (X_train <= split).reshape(-1)\n",
    "    left = y[cond]\n",
    "    right = y[~cond]\n",
    "    mse_left = ((left - left.mean(axis = 0))**2).mean()\n",
    "    mse_right = ((right - right.mean(axis = 0))**2).mean()\n",
    "    # 计算左右叶节点比例\n",
    "    left_percent = cond.sum()/cond.size \n",
    "    right_percent = 1 - left_percent\n",
    "    # 计算整体\n",
    "    mse = mse_left * left_percent + mse_right * right_percent\n",
    "#     print(mse,left_percent,right_percent)\n",
    "    if mse < mse_lower:\n",
    "        split_result.clear()\n",
    "        split_result[split] = mse\n",
    "        mse_lower = mse # 更新记录最小mse变量\n",
    "print('最佳裂分条件：',split_result)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "id": "fc25848a",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([-0.01277963,  0.05068012, -0.05578531, ...,  0.02840468,\n",
       "        0.01919647,  0.01134862])"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "X_train.ravel()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "id": "876067b4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.5592145015105741"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "cond.sum()/cond.size"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "id": "b375843c",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "from sklearn.tree import DecisionTreeRegressor\n",
    "from sklearn import tree\n",
    "from sklearn import datasets\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.linear_model import LinearRegression\n",
    "\n",
    "diabetes = datasets.load_diabetes() # 糖尿病\n",
    "X = diabetes['data']\n",
    "y = diabetes['target']\n",
    "X_train,X_test,y_train,y_test = train_test_split(X,y,random_state = 911)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "id": "87880474",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'data': array([[ 0.03807591,  0.05068012,  0.06169621, ..., -0.00259226,\n",
       "          0.01990749, -0.01764613],\n",
       "        [-0.00188202, -0.04464164, -0.05147406, ..., -0.03949338,\n",
       "         -0.06833155, -0.09220405],\n",
       "        [ 0.08529891,  0.05068012,  0.04445121, ..., -0.00259226,\n",
       "          0.00286131, -0.02593034],\n",
       "        ...,\n",
       "        [ 0.04170844,  0.05068012, -0.01590626, ..., -0.01107952,\n",
       "         -0.04688253,  0.01549073],\n",
       "        [-0.04547248, -0.04464164,  0.03906215, ...,  0.02655962,\n",
       "          0.04452873, -0.02593034],\n",
       "        [-0.04547248, -0.04464164, -0.0730303 , ..., -0.03949338,\n",
       "         -0.00422151,  0.00306441]]),\n",
       " 'target': array([151.,  75., 141., 206., 135.,  97., 138.,  63., 110., 310., 101.,\n",
       "         69., 179., 185., 118., 171., 166., 144.,  97., 168.,  68.,  49.,\n",
       "         68., 245., 184., 202., 137.,  85., 131., 283., 129.,  59., 341.,\n",
       "         87.,  65., 102., 265., 276., 252.,  90., 100.,  55.,  61.,  92.,\n",
       "        259.,  53., 190., 142.,  75., 142., 155., 225.,  59., 104., 182.,\n",
       "        128.,  52.,  37., 170., 170.,  61., 144.,  52., 128.,  71., 163.,\n",
       "        150.,  97., 160., 178.,  48., 270., 202., 111.,  85.,  42., 170.,\n",
       "        200., 252., 113., 143.,  51.,  52., 210.,  65., 141.,  55., 134.,\n",
       "         42., 111.,  98., 164.,  48.,  96.,  90., 162., 150., 279.,  92.,\n",
       "         83., 128., 102., 302., 198.,  95.,  53., 134., 144., 232.,  81.,\n",
       "        104.,  59., 246., 297., 258., 229., 275., 281., 179., 200., 200.,\n",
       "        173., 180.,  84., 121., 161.,  99., 109., 115., 268., 274., 158.,\n",
       "        107.,  83., 103., 272.,  85., 280., 336., 281., 118., 317., 235.,\n",
       "         60., 174., 259., 178., 128.,  96., 126., 288.,  88., 292.,  71.,\n",
       "        197., 186.,  25.,  84.,  96., 195.,  53., 217., 172., 131., 214.,\n",
       "         59.,  70., 220., 268., 152.,  47.,  74., 295., 101., 151., 127.,\n",
       "        237., 225.,  81., 151., 107.,  64., 138., 185., 265., 101., 137.,\n",
       "        143., 141.,  79., 292., 178.,  91., 116.,  86., 122.,  72., 129.,\n",
       "        142.,  90., 158.,  39., 196., 222., 277.,  99., 196., 202., 155.,\n",
       "         77., 191.,  70.,  73.,  49.,  65., 263., 248., 296., 214., 185.,\n",
       "         78.,  93., 252., 150.,  77., 208.,  77., 108., 160.,  53., 220.,\n",
       "        154., 259.,  90., 246., 124.,  67.,  72., 257., 262., 275., 177.,\n",
       "         71.,  47., 187., 125.,  78.,  51., 258., 215., 303., 243.,  91.,\n",
       "        150., 310., 153., 346.,  63.,  89.,  50.,  39., 103., 308., 116.,\n",
       "        145.,  74.,  45., 115., 264.,  87., 202., 127., 182., 241.,  66.,\n",
       "         94., 283.,  64., 102., 200., 265.,  94., 230., 181., 156., 233.,\n",
       "         60., 219.,  80.,  68., 332., 248.,  84., 200.,  55.,  85.,  89.,\n",
       "         31., 129.,  83., 275.,  65., 198., 236., 253., 124.,  44., 172.,\n",
       "        114., 142., 109., 180., 144., 163., 147.,  97., 220., 190., 109.,\n",
       "        191., 122., 230., 242., 248., 249., 192., 131., 237.,  78., 135.,\n",
       "        244., 199., 270., 164.,  72.,  96., 306.,  91., 214.,  95., 216.,\n",
       "        263., 178., 113., 200., 139., 139.,  88., 148.,  88., 243.,  71.,\n",
       "         77., 109., 272.,  60.,  54., 221.,  90., 311., 281., 182., 321.,\n",
       "         58., 262., 206., 233., 242., 123., 167.,  63., 197.,  71., 168.,\n",
       "        140., 217., 121., 235., 245.,  40.,  52., 104., 132.,  88.,  69.,\n",
       "        219.,  72., 201., 110.,  51., 277.,  63., 118.,  69., 273., 258.,\n",
       "         43., 198., 242., 232., 175.,  93., 168., 275., 293., 281.,  72.,\n",
       "        140., 189., 181., 209., 136., 261., 113., 131., 174., 257.,  55.,\n",
       "         84.,  42., 146., 212., 233.,  91., 111., 152., 120.,  67., 310.,\n",
       "         94., 183.,  66., 173.,  72.,  49.,  64.,  48., 178., 104., 132.,\n",
       "        220.,  57.]),\n",
       " 'frame': None,\n",
       " 'DESCR': '.. _diabetes_dataset:\\n\\nDiabetes dataset\\n----------------\\n\\nTen baseline variables, age, sex, body mass index, average blood\\npressure, and six blood serum measurements were obtained for each of n =\\n442 diabetes patients, as well as the response of interest, a\\nquantitative measure of disease progression one year after baseline.\\n\\n**Data Set Characteristics:**\\n\\n:Number of Instances: 442\\n\\n:Number of Attributes: First 10 columns are numeric predictive values\\n\\n:Target: Column 11 is a quantitative measure of disease progression one year after baseline\\n\\n:Attribute Information:\\n    - age     age in years\\n    - sex\\n    - bmi     body mass index\\n    - bp      average blood pressure\\n    - s1      tc, total serum cholesterol\\n    - s2      ldl, low-density lipoproteins\\n    - s3      hdl, high-density lipoproteins\\n    - s4      tch, total cholesterol / HDL\\n    - s5      ltg, possibly log of serum triglycerides level\\n    - s6      glu, blood sugar level\\n\\nNote: Each of these 10 feature variables have been mean centered and scaled by the standard deviation times the square root of `n_samples` (i.e. the sum of squares of each column totals 1).\\n\\nSource URL:\\nhttps://www4.stat.ncsu.edu/~boos/var.select/diabetes.html\\n\\nFor more information see:\\nBradley Efron, Trevor Hastie, Iain Johnstone and Robert Tibshirani (2004) \"Least Angle Regression,\" Annals of Statistics (with discussion), 407-499.\\n(https://web.stanford.edu/~hastie/Papers/LARS/LeastAngle_2002.pdf)\\n',\n",
       " 'feature_names': ['age',\n",
       "  'sex',\n",
       "  'bmi',\n",
       "  'bp',\n",
       "  's1',\n",
       "  's2',\n",
       "  's3',\n",
       "  's4',\n",
       "  's5',\n",
       "  's6'],\n",
       " 'data_filename': 'diabetes_data_raw.csv.gz',\n",
       " 'target_filename': 'diabetes_target.csv.gz',\n",
       " 'data_module': 'sklearn.datasets.data'}"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "diabetes"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "id": "c2e72b71",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.41394315401409987"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#线性回归\n",
    "linear = LinearRegression()\n",
    "linear.fit(X_train,y_train)\n",
    "linear.score(X_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "id": "2e720fe7",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "-0.08448890704777567"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#决策树\n",
    "model = DecisionTreeRegressor()\n",
    "model.fit(X_train,y_train)\n",
    "model.score(X_test,y_test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "id": "4cb7d80b",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0.5, 1.0, '决策树R2随着深度变化')"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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a4ztwYMHuuThdSQlJUm7du3k2LFjun3x8fGya9cu+fTTT8XLy0vq168v8+fPN/jvIjo6Wnr37q1Xi9KmTRuZOHGibNy4Uc6cOWNw+oSJEydKjRo1pGjRolKuXDlp27atfP/99+n2u7l586a8/fbbqf7tFS9eXJo1ayaDBg2SuXPnpvt3OHr0aFmzZk0WPyWyRCqR/5+ulcgCzJ07F+fOncOYMWPw5ptvZuo9V69exa1bt5CUlAQbGxvY29vD29v7tZYa+OKLLzBz5kwcPnwYjRo1yvL703L//n0MHjwYu3fvzvR7FixYAH9/fwDA9u3b0a5dO6PFk9tERETgxYsX8Pb2TjXbcGaFhISgY8eOmDNnDuzs7FCuXDm4ubkBUGYRL1++PB48eIDBgwdj6dKlxgxfp1u3bnj//ffRq1evLL/3yZMnSExM1JutOTw8HCdPnkShQoVQrlw5FClSJMPzbN68GTNnzsSVK1cgIihYsCCKFSuGkiVLon79+vjiiy+yHJshSUlJmD17NpYtW4bHjx+jcOHCKFu2LKpWrYq33noLTZs25UrxZBRMhIhM6NSpU+jfvz/++ecf2NramjUWEUHTpk1x584d3Lx50+zx5HVz587F2LFjcebMGVSvXt3c4RBRJjERIrJg4eHhiI6Ohre3t7lDyfOSk5Px559/omnTpuYOhYiygIkQERERWazXaywnIiIiygeYCBEREZHFYiJEREREFouJEBEREVksJkJERERksZgIERERkcViIkREREQWi4kQERERWSwmQkRERGSxmAgRERGRxWIiRERERBaLiRARERFZLCZCREREZLGYCBEREZHFYiJEREREFouJEBEREVksJkJERERksZgIERERkcViIkREREQWi4kQERERWSxrcweQ22m1Wjx69AjOzs5QqVTmDoeIiIgyQUQQFRWF4sWLw8oq7XofJkIZePToEby9vc0dBhEREb2GkJAQeHl5pXmciVAGnJ2dASgfpIuLi5mjISIiosyIjIyEt7e37jmeFiZCGUhpDnNxcWEiRERElMdk1K2FnaWJiIjIYjERIiIiIovFRIiIiIgsFhMhIiIislhMhIiIiMhiMREiIiIii8VEiIiIiCwWEyEiIiKyWEyEiIiIyGJxZmkiIrI4Gq0GQcFBeBz1GJ7OnvAt6Qu1ldqiYrD066dgIkRERCZnzodg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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "#筛选超参数\n",
    "import matplotlib.pyplot as plt\n",
    "plt.rcParams['font.family'] = 'STKaiti'\n",
    "max_depth = np.arange(1,16)\n",
    "score1 = [] # 测试\n",
    "score2 = [] # 训练\n",
    "for d in max_depth:\n",
    "    model = DecisionTreeRegressor(max_depth = d)\n",
    "    model.fit(X_train,y_train)\n",
    "    score1.append(model.score(X_test,y_test))\n",
    "    score2.append(model.score(X_train,y_train))\n",
    "    \n",
    "plt.plot(max_depth,score1,'ro-')\n",
    "plt.plot(max_depth,score2,'go-')\n",
    "plt.xlabel('max_depth',fontsize = 18)\n",
    "plt.ylabel('Score',fontsize = 18)\n",
    "plt.title('决策树R2随着深度变化',pad = 20,fontsize = 20)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "301e0d8d",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "284.427px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
